Kill

killall 僅用於此終端

  • November 22, 2018

在調試時,我經常使用killall殺死一個程序。這確實是一個壞習慣,因為系統上可能有更多同名的程序在執行。

通常,我要殺死的程序是與killall開始時相同的父(或祖父)的後代。通常我想殺死在同一個終端或另一個選項卡(在 Konsole 中)中的終端啟動的程序。

有沒有辦法告訴killall(或另一個殺手)將範圍限制為從此終端啟動的程序或來自同一(祖)父級的後代的程序?

如果您想從該會話中終止所有程序(將目前 tty 作為其控制終端的程序):

tty=`tty`; pkill -t "${tty#/dev/}"

或者更簡單:

pkill -s 0

根據 pkill(1):

-s, --session sid,...

 Only match processes whose process session ID is  listed.   Ses-
 sion ID 0 is translated into pgrep's or pkill's own session ID.

-t和選項都-s可以與模式和其他選項組合(ANDed),例如。pgrep -s0 -x foo對於此會話中的程序,其名稱為foo. 不幸的是,既不pgrep也不pkill支持複雜的tcpdump- 風格的謂詞。

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