【发布时间】:2014-10-27 13:09:51
【问题描述】:
我有一个脚本,它在开始时运行一个后台进程,然后到最后需要停止该后台进程及其子进程,然后执行一些其他任务等,然后在必要时返回一个错误代码。我该怎么做呢?我已经看到了几个如何杀死包括父进程在内的整个树的示例(例如kill 0),但我希望主脚本继续运行并返回正确的错误代码。例如:
./some_process_with_child_processes &
./do_stuff
kill $! # doesnt kill child processes!
./do_other_stuff
exit 5
【问题讨论】:
-
修改程序,让父级忽略信号而父级不忽略/
-
立即想到了一些想法,在不了解您的代码库的情况下,您可以确保所有子进程都具有与父进程相关的唯一名称,例如,所有内容都带有前缀foo_project_child_,这样你就可以简单地使用 pkill -f foo_project_child_ 来处理事情,否则,你反对使用像 redis 等数据存储,你可以查询并找出你需要杀死哪些进程?
-
如果可能的话,我宁愿不对所有 foo_project_etc* 实例执行全局 pkill,我希望它是独立的。我还没有研究过redis,我现在会。 @Ed我如何修改我的shell脚本不被杀死,但它的子进程会被杀死?这是我的问题。
-
@grasevski - 使用
trap