linux 父进程中不阻塞不轮询回收子进程的两种方
来源:互联网 发布:电子数据取证软件 编辑:程序博客网 时间:2024/05/29 10:54
在linux 中,子进程的正常退出后,还有一些资源没有被释放掉,一般的方式是父进程负责来回收子进程的资源,采用wait()和waitpid()函数,前者只能只能阻塞的方式等待子进程从其它状态变为僵尸态,后者可以以阻塞的方式或者轮询的方式来等待子进程的状态改变,不管是阻塞方式还是轮询方式,父进程必然要消耗一些时间开销来做这件事情,其实可以通过信号的用不阻塞不轮询的方式回收成为僵尸态的子进程,对于SIGCHLD信号,只要子进程的状态发生改变,它就会发送此信号给父进程,但是系统默认的方式是SIG_IGN,我们可以通过注册函数来捕捉这个信号,处理函数调用waitpid 以非阻塞方式来处理该信号:
typedef struct void *sighandler_t (int)
sighandler_t signal(int signum, sighandler_t handler); //信号处理函数的定义
在父进程中注册信号处理函数: signal(SIGCHLD, sig_handler);
实现信号处理函数: void * sig_handler(int signum)
{
//信号来了调用
waitpid(-1,NULL, WNOHANG);
}
还有一种方式,父进程显式的调用signal(SIGCHLD, SIG_IGN),将SIGCHLD 信号的处理动作设置为SIG_IGN,这样fock出来的子进程在终止时会自动清理掉,不会产生僵尸进程,也不会通知父进程。另外需要注意的是这仅仅是个特例,对于其它情况,系统默认的动作和我们自己显示设置的动作是没有区别的,这种方式也仅仅适用于linux系统。
- linux 父进程中不阻塞不轮询回收子进程的两种方
- linux 中 signal 用法回收子进程结束产生的僵尸进程
- linux 信号 回收子进程
- 信号注册函数回收子进程,waitpid非阻塞回收
- Linux中,子进程与父进程的继承关系
- 回收子进程的资源
- 父进程wait回收子进程
- linux 进程的管理、子进程创建、进程资源的回收
- Linux进程全解7——父进程wait / waitip回收子进程
- 【Linux】回收子进程—wait/waitpid
- Linux中建立新的进程,父进程等待子进程的退出
- 进程学习5--父进程wait回收子进程
- wait()函数,作用:阻塞等待任意子进程,回收子进程8kb物理内存
- Linux 进程--父进程查询子进程的退出状态
- Linux 进程--父进程查询子进程的退出状态
- linux fork出的子进程从父进程继承些什么不继承什么
- 子进程继承父进程的什么不继承什么
- linux 多进程并发服务__关于子进程回收的方法
- iOS 跳转到系统的设置界面
- 选择法排序
- 二维码的纠错等级
- 线性探测可再散列的散列
- 学习笔迹——DisplayImageOptions,网络图片显示
- linux 父进程中不阻塞不轮询回收子进程的两种方
- ASCII、Unicode、GBK和UTF-8字符编码的区别联系
- MYSQL导入导出.sql文件
- CodeForces 627B Factory Repairs
- JSP页面的生命周期
- hdu 1520 Anniversary party 树形dp入门
- POJ1149 PIGS
- TCP长连接与短连接的区别
- 用java实现找出1-100之间的质数(两种方法)