您好、欢迎来到现金彩票网!
当前位置:2019欢乐棋牌 > 子进程 >

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

发布时间:2019-07-05 03:07 来源:未知 编辑:admin

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

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

  子进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用 exit,它的作用是使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)。

  即使是root身份kill -9也不能杀死僵尸进程。补救办法是杀死僵尸进程的父进程(僵尸进程的父进程必然存在),僵尸进程成为孤儿进程,过继给1号进程init,init始终会负责清理僵尸进程。

  (1) 父进程通过wait和waitpid等函数等待子进程结束,这会导致父进程挂起。

  (2) 如果父进程很忙,那么可以用signal函数为SIGCHLD安装handler,因为子进程结束后, 父

  (3) 如果父进程不关心子进程什么时候结束,那么可以用signal(SIGCHLD, SIG_IGN) 通知内

  核,自己对子进程的结束不感兴趣,那么子进程结束后,内核会回收, 并不再给父进程发送

  (4) 还有一些技巧,就是fork两次,父进程fork一个子进程,然后继续工作,子进程fork一 个孙进

  程后退出,那么孙进程被init接管,孙进程结束后, init会回收。不过子进程的回收 还要自己

  建议你使用第三种方法,父进程直接忽略子进程的结束,留给内核作回收处理。这样就不

  killall命令杀死同一进程组内的所有进程。它要指定要终止的进程的名称,而非PID。

http://hazardlabo.com/zijincheng/163.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有