首页 > 代码库 > signal(SIGCHLD, SIG_IGN);的使用及验证
signal(SIGCHLD, SIG_IGN);的使用及验证
#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include<stdlib.h>#include<signal.h>int main(int argc , char **argv){signal(SIGCHLD, SIG_IGN); int id; id=fork(); if(id<0) { printf("fork error\n"); } else if(id==0) { printf("I‘m in child process%d parent process%d\n",getpid(),getppid()); exit(0); } else if(id>0) { printf("I‘m in parent process%d\n",getpid()); sleep(60); } //signal(SIGCHLD, SIG_IGN); return 0;}[root@linux Desktop]# gcc 僵尸进程.c[root@linux Desktop]# ./a.outI‘m in parent process8072I‘m in child process8073 parent process8072 //第二行[root@linux Desktop]# 在第二行输出后会阻塞大概1分钟,我们执行以下命令[root@linux Desktop]# ps aux | grep ‘Z‘USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 8076 0.0 0.0 4340 740 pts/1 S+ 22:47 0:00 grep Z可以发现没有僵尸进程啊,感觉很奇怪吧!这是因为init进程调用wait把子进程的进程表项等资源清理了!为啥子进程没有成为僵尸进程而成为了init的子进程呢?很奇怪吧!因为signal(SIGCHLD, SIG_IGN);这一行代码,所以子进程成为了init的子进程!一定要注意signal(SIGCHLD, SIG_IGN);的位置,因为程序执行时,是从上面往下执行的,因为我们执行那些命令时,这行代码还未执行,然而这时子进程已经成为了僵尸进程了!见下面如果这行代码的位置在最后面,那么结果将是不一样的,下面就是执行结果:[root@linux Desktop]# ps aux | grep -w ‘Z‘root 8734 0.0 0.0 0 0 pts/0 Z+ 23:32 0:00 [a.out] <defunct>root 8737 0.0 0.0 4336 792 pts/1 S+ 23:32 0:00 grep -w Z[root@linux Desktop]# 可以看出产生了僵尸进程!我们可以用ps --ppid 1来查看父进程号为1的进程!(那个进程号都可以)也可以用 ps --pid 1 来查看进程号为1的进程 [root@linux Desktop]# ps --pid 1 PID TTY TIME CMD 1 ? 00:00:04 init但是我们一定要记住使用这些命令时,一定要记住在程序运行时,才能得到结果的!程序一旦结束是看不到的!下面是一个例子,在一个窗口中[root@linux Desktop]# ./a.outI‘m in parent process8853I‘m in child process8854 parent process8853//会停顿大概一分钟,为了能看清楚[root@linux Desktop]# 下面的要在另一个窗口看[root@linux Desktop]# ps --pid 8854 PID TTY TIME CMD 8854 pts/0 00:00:00 a.out[root@linux Desktop]# ps --ppid 8853 PID TTY TIME CMD 8854 pts/0 00:00:00 a.out[root@linux Desktop]# ps --ppid 8853 PID TTY TIME CMD //注意这儿没有输出任何结果,是因为程序执行结束了[root@linux Desktop]# 一定要记住在程序正在运行时看,包括查看僵尸进程,因为一旦程序结束了,那么僵尸进程估计就看不到了!切记。。。
signal(SIGCHLD, SIG_IGN);的使用及验证
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。