- 论坛徽章:
- 0
|
原帖由 xltao 于 2006-9-15 16:59 发表
to susesuse:
不太同意你的看法, 这是个本来就很难重现的问题, 不能因为只举个例子就推出结论.
我想问你当父进程正在执行sigchld的信号处理程序, 内核这时向父进程发送一个sigchld,
因为sigchld是不可靠信号,进 ...
我的意思就是waitpid和信号没关系.
- #include <stdio.h>
- #include <stdlib.h>
- #include <signal.h>
- #include <sys/types.h>
- #include <unistd.h>
- #include <sys/wait.h>
- void child_func()
- {
- return;
- }
- int main(void)
- {
- pid_t pid;
- int stat;
- if((pid = fork()) == 0)
- {
- child_func();
- printf("child process %d exit!\n",getpid());
- exit(0);
- }
- else if(pid > 0)
- {
- sleep(5);
- pid = waitpid(-1,&stat,WNOHANG);
- printf("child %d exit!\n",pid);
- }
- else
- {
- printf("fork failed\n");
- exit(-1);
- }
- return 0;
- }
复制代码
运行结果:
child process 23507 exit!
child 23507 exit!
这个程序里child信号不早就丢了吗,但子进程不照样被回收了吗? |
|