终止进程失败

终止进程失败

我正在运行一个 bash 脚本作为后台作业。bash 脚本调用一个耗时的可执行文件。如果我没记错的话,bash 脚本的运行是父进程,而可执行文件的运行是子进程。

我现在想通过终止父进程(即后台作业)来停止整个运行

kill -9 $(jobs -p)

终端显示 bash 脚本的运行已被终止。但可执行文件的运行仍挂在 top 的输出上。我只是想知道如何同时终止子进程?

答案1

使用负 PID 将导致进程组被终止。这--告诉 kill 其余参数不是选项开关,因此 PID 前的连字符(减号)不会造成混淆。

kill -- -12345

此外,-9这是最后的手段。至少在尝试过-15(SIGTERM,这是默认值)之前不要使用它。这让程序有机会在退出之前进行一些日常管理。请参阅何时应使用 kill -9或者kill -9 无用或者杀死-9

答案2

killall可能会给你带来更好的结果。

警告:killall 在不同的 *nix 上表现不同。在 Linux 上,它将终止标题与参数匹配的进程。在 Solaris 上,它将终止每个进程,而不仅仅是您指定的那些。因此在 Solaris 上,以 root 身份运行 killall 将有效地关闭机器。确保您知道该命令遵循哪些行为

相关内容