Unix:如何基于lsof命令杀死进程列表(PID)?

fkvaft9z  于 2023-03-02  发布在  Unix
关注(0)|答案(4)|浏览(182)

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

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

该命令将显示PID列表。
pid1基因
pid2基因
...
然后,我运行以下命令来删除这些PID。

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

kill命令执行时,终端只是不知何故挂起,没有杀死任何PID。然后我不得不恢复到一个接一个地杀死这些PID。
因此,有没有一种方法可以做到我打算做的如上所述?谢谢。

yzxexxkh

yzxexxkh1#

xargs是一个标准实用程序,用于对从标准输入读取的每一行执行操作。

> lsof <file> | awk '{print($2)}' | xargs -I '{}' kill {}
6kkfgxo0

6kkfgxo02#

也许你可以试试for i in (lsof <file>); echo "pkill"$i,或者你也可以试试像lsof <file> > pkill这样的东西,尽管我不抱任何希望。

2izufjch

2izufjch3#

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

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

我不确定是否有更好的方法来实现这一点,而不需要为这种用法编写脚本。

wnavrhmk

wnavrhmk4#

您是否遇到过fuser命令。
选项-k将终止打开指定文件的所有进程。

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选项

相关问题