我需要标记一个通用进程(我并不真正控制正在运行的命令)。
我可以做这样的事情吗:
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,等待进程退出,然后删除文件。