如何杀死一个shell脚本和它创建的进程?

Posted

技术标签:

【中文标题】如何杀死一个shell脚本和它创建的进程?【英文标题】:How to kill a shell script and processes it created? 【发布时间】:2013-08-01 20:39:46 【问题描述】:

我在 php 中运行一个 shell 脚本(使用 shell_exec)。我想杀死它以及它在运行时创建的所有进程。我知道shell脚本pid。你有什么建议吗? 我正在使用 ubuntu,php 作为 apache 模块。

谢谢。

例子:

#!/bin/bash
echo hello
sleep 20

当我终止我的脚本 (shell_exec("sudo kill -9 $pid")) 时,睡眠进程不会被终止,这是不希望的。

【问题讨论】:

一般来说,杀死 shell 也会杀死它的子进程。否则,请了解进程组。 【参考方案1】:

使用

pkill -TERM -P pid

会杀死子进程

见this answer

【讨论】:

它会杀死进程 pid 及其子进程,但不会杀死孙子或以下进程。 anubhava's answer下面可以全部杀掉,也可以在this question看到其他答案,如1,2【参考方案2】:

改用这个 kill 命令:

kill -- -$pid

杀死正在运行的脚本及其所有衍生的孩子。

【讨论】:

我愿意。 “sudo kill -- -3768”,我得到了“Kill:没有这样的进程”。 你可以先从命令行试试。我已经尝试过你的脚本并且它有效。

以上是关于如何杀死一个shell脚本和它创建的进程?的主要内容,如果未能解决你的问题,请参考以下文章

如何在linux中使用shell脚本杀死进程时获取退出代码=0

在 shell 脚本中杀死后台进程

shell脚本杀死监听端口3000的进程? [复制]

shell脚本杀死监听端口3000的进程? [复制]

shell脚本获取进程ID并杀死的实现及问题解析

使用Shell脚本查找程序对应的进程ID,并杀死进程