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

时间:2016-07-20 05:19:41

标签: unix kill lsof

我想杀死与tcsh shell中的进程相关的PID列表。我运行了以下命令:

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

该命令将显示PID列表。

  

PID1

     

PID2

     

...

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

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

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

因此,有没有办法按照上面的说明做我打算做的事情?谢谢。

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

也许你可以试试 for i in (lsof <file>); echo "pkill"$i 或者你也可以试试像 lsof <file> > pkill虽然我没有任何可行的希望......

答案 2 :(得分:0)

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

ViewPager

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

答案 3 :(得分:0)

您是否遇到过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选项