Process

當PID不斷變化時殺死程序

  • September 11, 2020

當我發出

ps aux | grep mtp

我明白了

ubuntu-+ 15934 0.1 0.0 519848 7068?Sl 21:13 0:00 /usr/lib/gvfs/gvfsd-mtp –spawner :1.9 /org/gtk/gvfs/exec_spaw/20

所以本例中的 PID 是 15934。但是每次執行新的 PID 都是不同的。除了PID之外,還有其他方法可以殺死程序嗎?

可能有一個父程序殺死子程序並派生新的子程序。您可以使用 pstree 查找父程序:

pgrep mtp | xargs -i pstree -ps {}

或者,您可以使用 ps 的 ppid 選項:

pgrep mtp | while read line; do ps -p $line -o ppid; done

然後你可以殺死父程序

如果你想殺死一個不斷變化的程序,你可以動態地這樣做:

pkill name_of_process

或者

kill -kill $(ps -A | grep name_of_process | awk '{print $1}')

在此處了解有關 Kill 的更多資訊:https ://www.thegeekstuff.com/2009/12/4-ways-to-kill-a-process-kill-killall-pkill-xkill/

注意grep 或 sed 執行的搜尋區分大小寫,您必須確保將特定程序縮小到 PID 以外的唯一標識符,然後才能使用這些範例將其終止。

如果您想動態查找該程序的父程序,您可以:

ps -o ppid=$(ps -A | grep name_of_process | awk '{print $1}')

從那裡你可以殺死父程序,因為你有它的 PPID。

如果您無法終止父程序,則必須求助於第一種解決方案。問題是,有時程序的 PID 變化得比你發現的要快。在這種情況下,您可能想要使用 Sed 而不是 Grep。第一個例子變成:

kill -kill $(ps -A | sed '/name_of_process/!d' | awk '{print $1}')

為了進一步加快速度,您可能希望通過使用其他標誌 other -A來磨練****ps命令返回的結果。查看 ps 手冊頁:

https://www.man7.org/linux/man-pages/man1/ps.1.html

有時,一個程序在守護程序的幫助下繼續執行。看看你是否也能殺死它。

您可能會考慮的另外兩件事是與程序關聯的終端killall命令。

https://linoxide.com/linux-command/linux-killall-my-options/

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