回车之后,屏幕上什么都没有。
不是报错,也不是正常的命令回显,光标停在那儿,整段是空的。我盯着看了几秒,还在想是不是机器卡住了。紧接着 SSH 会话断了。
pkill -f '/usr/bin/3proxy'
我扫了一眼,觉得像模像样,回车。

问题出在那个 -f。
pkill -f 不是按进程名杀,是按整条命令行去匹配。而敲这条命令的那个 shell,自己的命令行里就明明白白写着 pkill -f '/usr/bin/3proxy'——里面就含着 /usr/bin/3proxy 这个串。pkill 挨个进程比对,比到自己头上,就把执行它的那个 shell 一起带走了。shell 一没,SSH 会话跟着断。屏幕之所以是空的,是那条命令根本没来得及把结果写回来,负责写字的进程已经死了。
经典的自杀命令。我以前写脚本,ps aux | grep 后面的模式习惯写成 [x]xx,就是为了绕开这种自匹配。可这次命令是 AI 吐的,我没多看一眼。
修起来不复杂,是往给 AI 的提示词里补一条「生成命令时的常识」:
- 杀进程优先
pkill -x 3proxy。-x精确匹配进程名,不看命令行,不会揪到自己。 - 非要按命令行匹配,就给模式加中括号:
pkill -f '[3]proxy'。命令行里写的是[3]proxy这个字面量,正则[3]proxy认的是3proxy,两边对不上,它就不会选中自己。 ps aux | grep同理,写成grep '[3]proxy'。
这条不写进去,AI 永远想不到。它给命令的时候,脑子里没有「我正在跑的这条命令也在进程表里」这个概念。
那天从 V95 一路改到 V113,一天 18 个版本,全在补这类边角。这条不算最难的,但挺典型——它不是「AI 不会用 pkill」,是它不懂那个 -f 到底在匹配什么。工具的用法,它背得比我还熟;可它没被自己杀过。
同类的事之前也写过一个:一台机器上起服务,静默失败,systemd 在那儿干等了 90 秒(那篇在这里)。都是看着像卡死、其实底下根因很清楚的那一类。共同点就一个——它不吭声。
这条规则进了七亿批量远程管理工具的提示词之后,它再没给我生成过自杀命令。至少到 V113 为止,没有。
评论