杀死由 sudo fusionr 显示的进程,并按 COMMAND 列过滤

杀死由 sudo fusionr 显示的进程,并按 COMMAND 列过滤

使用下面的行,我已经能够看到使用 GPU 的进程,其中一些进程在 COMMAND 列下提到了 python。

sudo fuser -v /dev/nvidia* 

打印:

                     USER        PID ACCESS COMMAND
/dev/nvidia0:        root       1197 F...m Xorg
                     alireza    1451 F...m gnome-shell
                     alireza    5527 F...m python
                     alireza    5567 F.... python
                     alireza    5568 F.... python

如何杀死命令列中提到的所有 python 进程。但到目前为止,我必须为每个 PID 手动执行此操作,sudo kill -9 <pid>如果有很多 PID,这并不容易。

有没有一种方法可以使其自动化并使其更快?就像只写一个命令并杀死所有在 COMMAND 列中有 pyton 的 PID?

答案1

编辑

这是一个单行代码,应该使用以下命令杀死所有 python 进程/dev/nvidia*

sudo fuser -v /dev/nvidia* 2>&1 | grep python | grep -o -E " [0-9]+ " | xargs kill

2>&1由于fuser输出结果的方式,重定向是必要的。grep python将选择包含 的所有行python,然后grep -o -E " [0-9]+ "提取 PID 并xargs kill杀死所有行。

请先运行sudo fuser -v /dev/nvidia* 2>&1 | grep python以验证是否没有错误地选择不需要的进程。

原答案

以下命令将显示使用硬件文件的进程/dev/nvidia*,并提示您是否要一一杀死它们:

$ sudo fuser -ikv /dev/nvidia*

                     USER        PID ACCESS COMMAND
/dev/nvidia0:        root       1197 F...m Xorg
                     alireza    1451 F...m gnome-shell
                     alireza    5527 F...m python
                     alireza    5567 F.... python
                     alireza    5568 F.... python
Kill process 1191 ? (y/N) N
Kill process 1451 ? (y/N) N
Kill process 5527 ? (y/N) y
...

这不是一个可以杀死所有 python 命令的单行命令(应该可以使用fuser | grep | cut | kill),但它比手动输入每个 PID 更快。

相关内容