给定一个进程的完整文件名,我该如何终止它?不仅通过文件名,还可以通过完整文件名。我研究过 kill 和 pkill 但它们不是我想要的。
答案1
如果您的脚本可以通过其全名(包括路径)显示,请使用附言,你可以轻松地做到这一点:
MYPID=$( ps faux | grep '/tmp/test.sh' | grep -vw grep | awk '{ print $2 }' );
echo ${MYPID};
kill -9 ${MYPID};
注意:我在 Debian Jessie 上运行它,所以如果你这样做或使用基于 Debian 的发行版,它应该可以工作。
答案2
在 Linux 上,您可以使用 lsof 执行此操作并将输出传送到kill
。我使用lsof
来搜索持有可执行文件的进程,然后检查该进程的可执行文件是否指向感兴趣的文件。
NAME=/my/object/that/executes
CANON=`readlink -en "$NAME"`
[ -n "$CANON" ] || exit 1
for pid in `lsof -tf -- "$CANON"`
do
PIDEXE=`readlink -en /proc/$pid/exe`
[ x"$CANON" == x"$PIDEXE" ] && echo $pid
done
限制:
这要求可执行文件在文件系统中仍然可见,并且您将找不到在不同位置以此可执行文件启动的进程或仅使用该可执行文件进行引导的进程。
和谨防,这种事情对竞争条件非常敏感,你最终可能会杀死清白的流程。