Answers:
如果程序配合,则有一种标准方法。运行kill -- -42
42是父进程的pid。这会将信号发送到由进程42引导的进程组中的所有进程(pid表示进程组之前的减号)。
通常,如果您从shell提示符运行python脚本,而只是进行fork gnuchess
,则这两个进程应保留在同一进程组中。但这似乎并非如此,因为Ctrl+ C发送SIGINT
到整个前台进程组。
Gnuchess可能在自己的进程组中,这是因为它使自己成为了会话领导者(但我不知道为什么会这样做),或者因为您已经将它双叉了(Python派生了一个分支,它分支了Gnuchess)。双叉也许是可以避免的,但是如果不看代码我不会告诉你怎么做。
查找gnuchess
过程pid的合理可靠且符合POSIX的方式是
gnuchess_pids=$(ps -A -o pid= -o cmd= | awk '$2 ~ /(^|\/)gnuchess$/ {print $1}')
特定的unix变体可能有更好的方法来实现此目的,例如pgrep
。
pkill
名字杀死进程,因此您的ps aux | grep gnuchess
和kill -9 PID
可以成为pkill -9 gnuchess