社区
Linux/Unix社区
帖子详情
请教一个关于僵尸进程的问题
HyperMeta
2015-01-03 03:29:21
需要做一个进程监控程序
M
,对A、B、C、D等多个程序(或者进程)进行监控,可以通过M启动A、B、C、D,也可以通过M关闭A、B、C、D;
启动已经实现了,是在M中创建一个子进程,然后在子进程中启动程序(或者进程),并记录下改子进程的pid;
但是关闭的时候,想直接kill想对应的子进程ID,但是,这样会kill不掉,子进程会编程僵尸进程,请问有没有比较好的方法啊,找不到比较好的方法。
[/size]
...全文
279
8
打赏
收藏
请教一个关于僵尸进程的问题
需要做一个进程监控程序M,对A、B、C、D等多个程序(或者进程)进行监控,可以通过M启动A、B、C、D,也可以通过M关闭A、B、C、D; 启动已经实现了,是在M中创建一个子进程,然后在子进程中启动程序(或者进程),并记录下改子进程的pid; 但是关闭的时候,想直接kill想对应的子进程ID,但是,这样会kill不掉,子进程会编程僵尸进程,请问有没有比较好的方法啊,找不到比较好的方法。[/size]
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ma100
2015-01-14
打赏
举报
回复
kill -9 呢
山椒π
2015-01-14
打赏
举报
回复
直接kill,然后解决僵尸进程的问题比较简单。 方法如上述楼层 1)忽略SIGCHILD信号,这个方式最简单,但有时会给其他程序带来影响 struct sigaction sa; sa.sa_handler = SIG_IGN; #ifdef SA_NOCLDWAIT sa.sa_flags = SA_NOCLDWAIT; #else sa.sa_flags = 0; #endif sigemptyset (&sa.sa_mask); sigaction (SIGCHLD, &sa, NULL); 其中sigaction (SIGCHLD, &sa, NULL);换作sigaction (SIGCHLD, &new_sa, &old_sa);可以使用old_sa来保存之前的,之后可以再用sigaction (SIGCHLD, &old_sa, NULL);来恢复。 2)利用孙子进程来处理事务,fork两次 pid_t pid; pid = fork(); if (pid < 0){ printf ("Error to fork while focus out/n"); }else if(pid == 0){ pid = fork(); if (pid < 0){ printf ("Error to fork while focus out/n"); }else if(pid == 0){ //孙子进程处理 execlp ("gedit","gedit",NULL, NULL); }else{ exit(0); //子进程退出 } } //父进程继续 3)使用waitpid或者wait来处理 其中waitpid(pid, NULL, WNOHANG);使用参数WNOHANG可以在子进程未退出时直接返回而不等待,但后面还是要继续判断处理。
南边风景好
2015-01-13
打赏
举报
回复
让父进程创建的子进程a再去创建一个子进程b去执行程序,然后子进程a退出,这样由于a已结束,其子进程b就会由init进程接管,就不会有僵尸进程了
河南智学未来
2015-01-11
打赏
举报
回复
子进程变成僵尸进程,楼主写的父进程应该是设计的没有时间收回子进程咯,可以考虑在父进程中有时间回收子进程,当然思路很重要啦, 3楼的建议也不错的
极客代码
2015-01-05
打赏
举报
回复
http://www.studyemb.cn/forum.php?mod=viewthread&tid=4&extra=page%3D1
猫已经找不回了
2015-01-05
打赏
举报
回复
http://www.cnblogs.com/anker/p/3271773.html 2种办法,一种就是主进程wait,还有一种就是主进程fork完之后忽略SIGCHLD。
zhxianbin
2015-01-03
打赏
举报
回复
使用 wait
http://no001.blog.51cto.com/1142339/493589
http://man7.org/linux/man-pages/man2/waitpid.2.html
打通Linux脉络系列:进程、线程和调度
本课程分成4个组成部分,每次课60分钟,每次课后留下3-4个练习题,可以在Linuxer公众号留言讨论答案和做题... 第四部分:讲解Linux多核下CPU、中断、软负载均衡、cgroups调度算法以及Linux为什么不是
一个
实时操作系统。
深入理解计算机系统:进程
导语:这是篇读书笔记,每次重读CSAPP都有新的认知,尤其是在进入了后台通道之后才感受到每天和进程打交道的感觉是如此深刻。0x00 What is Process?[ system str...
进程基本概念与常见调度 - 进程与线程(二)
早期的计算机一次只能执行
一个
任务,采用批处理的方法,由监督系统完成作业的切换,使得作业
一个
接
一个
的被处理,如下图所示 首先,由监督器将磁带上的第
一个
程序装入内存,并把运行的控制权交给作业 当该作业...
Linux进程管理父进程和子进程
Linux进程管理对于电脑使用的玩家的常用软件,然后我就学习及深入的研究Linux进程管理,在这里和大家...
一个
运行着的程序,可能有多个进程。 比如 LinuxSir.Org 所用的WWW服务器是apache服务器,当管理员启动服务后,可
面试官:kill -9 进程杀不掉,怎么办?
用ps和grep命令寻找僵尸进 ...cmd(命令)这四个参数 因为状态为 z或者Z的进程为
僵尸进程
, 所以我们使用grep抓取stat状态为zZ进程 运行结果参考如下 Z 12334 12339 /path/cmd 这时,我们可以使用 kill -HUP
Linux/Unix社区
23,120
社区成员
74,507
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章