标记一个进程,以便我以后可以通过识别轻松杀死它

标记一个进程,以便我以后可以通过识别轻松杀死它

我需要标记一个通用进程(我并不真正控制正在运行的命令)。

我可以做这样的事情吗:

run_special_cmd(){
   "$@"  -- --very-special-command
}

run_special_cmd sleep 5000 && echo 'bar'

然后稍后使用:

pkill -9 -f '--very-special-command'

找出那些要被杀死的进程?或者是否有更好的通用方法来标记进程以便以后识别?

答案1

并非所有命令都会忽略您传递给它们的任意参数。

如果被调用进程没有fork,可以保存调用进程的pid,用exec调用。使用脚本

#!/bin/sh
echo $$ > /var/run/foo.pid
exec "$@"

这将在同一进程中执行命令,并在执行进程之前保存 pid。

如果你想删除pid文件,可以在进程退出后删除它。

#!/bin/bash
PIDFILE=/var/run/foo.pid
"$@" &
echo $! > $PIDFILE
wait
rm -f $PIDFILE

这将在后台启动进程,记录pid,等待进程退出,然后删除文件。

相关内容