在 linux中如何结束由一个父进程产生的所有子进程

 我来答
百度网友d111d87
推荐于2019-03-03 · TA获得超过340个赞
知道小有建树答主
回答量:130
采纳率:100%
帮助的人:94.4万
展开全部
父进程未结束,子进程先结束,会产生僵尸进程。
子进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用 exit,它的作用是使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)。
即使是root身份kill -9也不能杀死僵尸进程。补救办法是杀死僵尸进程的父进程(僵尸进程的父进程必然存在),僵尸进程成为"孤儿进程",过继给1号进程init,init始终会负责清理僵尸进程。
僵尸进程的避免:
(1) 父进程通过wait和waitpid等函数等待子进程结束,这会导致父进程挂起。
(2) 如果父进程很忙,那么可以用signal函数为SIGCHLD安装handler,因为子进程结束后, 父
进程会收到该信号,可以在handler中调用wait回收。
(3) 如果父进程不关心子进程什么时候结束,那么可以用signal(SIGCHLD, SIG_IGN) 通知内
核,自己对子进程的结束不感兴趣,那么子进程结束后,内核会回收, 并不再给父进程发送
信号。
(4) 还有一些技巧,就是fork两次,父进程fork一个子进程,然后继续工作,子进程fork一 个孙进
程后退出,那么孙进程被init接管,孙进程结束后, init会回收。不过子进程的回收 还要自己
做。
建议你使用第三种方法,父进程直接忽略子进程的结束,留给内核作回收处理。这样就不
会产生僵尸进程。
万年长长青
2020-12-03 · 贡献了超过156个回答
知道答主
回答量:156
采纳率:0%
帮助的人:7.3万
展开全部

LInux 父进程关闭子进程

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kaixingui2012
推荐于2016-09-09 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6477万
展开全部

采用ps + grep + awk + pkill命令组合,可实现“结束由一个父进程产生的所有子进程”,如:

父进程名为 parent_proc,可先根据进程名称,得到进程PID

ps -ef |grep parent_proc|egrep -v grep | awk '{print $2}'

根据父进程PID终止所有子进程PID,保留父进程

pkill -9 -P $p_pid

完整脚本:

for p_pid in `ps -ef |grep parent_proc|egrep -v grep | awk '{print $2}'`
do
    pkill -9 -P $p_pid
done

有关各命令的详情介绍请查阅相关参考资料。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lyc900623
推荐于2017-12-15 · 超过20用户采纳过TA的回答
知道答主
回答量:56
采纳率:0%
帮助的人:49.5万
展开全部
killall命令杀死同一进程组内的所有进程。它要指定要终止的进程的名称,而非PID。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
扳机K331
2012-03-31 · TA获得超过134个赞
知道小有建树答主
回答量:397
采纳率:0%
帮助的人:150万
展开全部
pkill -a
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式