Unix:如何根据 lsof 命令终止进程列表 (PID)?

Unix: How to kill a list of processes (PID) based on the lsof command?

我想在 tcsh shell 中删除与进程相关的 PID 列表。我运行以下命令:

> losf <file> | awk '{print()"'

该命令将显示 PID 列表。

pid1

pid2

...

然后我 运行 下面的命令来杀死那些 PID。

> kill -9 `lsof <file> | awk'{print()}'`

当执行 kill 命令时,终端只是以某种方式挂起而没有杀死任何 PID。然后我不得不恢复到一个一个地杀死那些 PID。

因此,有没有一种方法可以像上面说明的那样做我打算做的事情?谢谢。

也许你可以试试 for i in (lsof <file>); echo "pkill"$i 或者你也可以尝试类似的东西 lsof <file> > pkill 虽然我不抱任何希望..

我设法使用以下 foreach 方法解决了这个问题:

> foreach id (`lsof <file> | awk '{print()"'`)
foreach? kill -9 $id
foreach? end

我不确定是否有更好的方法可以在不为此类用法编写脚本的情况下执行此操作。

你遇到过fuser命令吗?
选项 -k 将终止所有打开名为 file/files 的进程。

fuser -k -TERM /home/rolf/fs3/fs3.db /home/rolf/fs2.db
/home/rolf/fs3/fs3.db:  4026  4058
/home/rolf/fs2.db:   3996

默认发送 KILL,但您可以将其更改为 TERM,例如使用 -SIGNAL 选项

xargs 是标准实用程序,用于对从标准输入读取的每个给定行执行操作。你可以这样使用它:

> lsof <file> | awk 'print {}' | xargs -I '{}' kill {}