调试时我经常使用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
-风格的谓词。