Linux

殺死由命令列過濾的 sudo fuser 顯示的程序

  • July 31, 2020

使用以下行,我已經能夠看到使用 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

如何殺死 COMMAND 列中提到的所有 python 程序。但到目前為止,我必須為每個 PID 手動完成,sudo kill -9 <pid>如果它們很多,這並不容易。

有沒有辦法自動化並使其更快?就像只寫一個命令並殺死所有在 COMMAND 列中有 pyton 的 PID?

編輯

這是一個單行程序,應該使用以下命令殺死所有 python 程序/dev/nvidia*

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

由於輸出結果2>&1的方式,重定向是必要的。將選擇所有包含 的行,然後將提取 PID 並將其全部殺死。fuser``grep python``python``grep -o -E " [0-9]+ "``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 更快。

引用自:https://unix.stackexchange.com/questions/602204