Linux系统中是否存在杀死进程及所有子进程的简便方法?如何通过PID一次性终止目标进程及其所有子进程?
一次性杀死目标进程及其所有子进程的简便方法
这个问题我太熟了——手动杀父进程后,子进程会变成孤儿被init/systemd接管,残留着占资源确实闹心。下面给你几个靠谱的简便方法,按需选用:
方法1:利用进程组(最快捷)
每个进程都属于一个进程组,如果目标进程是进程组组长(通常自己启动的进程都是组长),直接用负的PID就能杀死整个进程组:
kill -TERM -<目标PID> # 如果进程不肯退出,改用强制杀死的KILL信号 kill -9 -<目标PID>
先确认目标进程是不是组长:用ps -o pgid= <目标PID>,输出的数字如果和目标PID一致,就是组长,放心用这个方法。
方法2:用pstree提取所有子进程ID(通用型)
不管目标进程是不是组长,这个方法都能精准捕获它的所有子进程,一起杀死:
pstree -p <目标PID> | grep -o '[0-9]*' | xargs kill -TERM
pstree -p <PID>:列出该PID下的所有进程,带进程IDgrep -o '[0-9]*':提取所有数字(也就是所有进程ID)xargs kill -TERM:把这些ID传给kill命令,发送终止信号
同样,需要强制杀死就把-TERM换成-9。
方法3:按进程名批量杀死(适合同名进程)
如果知道目标进程的名称,且想杀死所有同名进程及其子进程,用killall更方便:
killall -TERM <进程名称> # 强制杀死 killall -9 <进程名称>
注意:如果系统里有多个同名的无关进程,这个方法会误杀,所以只适合确定要杀死所有同名进程的场景。
额外技巧:确认进程是否都被清除
执行完命令后,用下面的命令检查目标进程树是否还存在:
pstree -p <目标PID> # 或者用ps查看 ps auxf | grep <目标PID>
内容的提问来源于stack exchange,提问作者Miya
相关产品推荐
相关产品推荐

