Killall 仅适用于此终端

Killall 仅适用于此终端

调试时我经常使用killall杀死进程。这确实是一个坏习惯,因为系统上可能有更多同名进程在运行。

通常,我想要杀死的进程是与killall启动时相同的父级(或祖父母)的后代。我经常想终止在同一终端或另一个选项卡(在 Konsole 中)中的终端中启动的程序。

有没有办法告诉killall(或另一个杀手)将范围限制为从此终端启动的进程或来自同一(祖)父代的后代进程?

答案1

如果您想终止此会话中的所有进程(以当前 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可以与模式和其他选项组合(AND),例如。pgrep -s0 -x foo对于此会话中名为 的进程foo。不幸的是,它们pgrep都不pkill支持复杂的、tcpdump-风格的谓词。

相关内容