- 论坛徽章:
- 11
|
本帖最后由 zylthinking 于 2011-12-09 17:43 编辑
- #include <unistd.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <sys/wait.h>
- void child_exit(int signo, struct siginfo* info, void* unsued){
- printf("info->si_code = %d\n", info->si_code);
- }
- int main(int argc,char **argv)
- {
- struct sigaction ac;
- ac.sa_sigaction = child_exit;
- sigemptyset(&ac.sa_mask);
- ac.sa_flags = SA_SIGINFO;
- ac.sa_restorer = 0;
- sigaction(SIGCHLD, &ac, 0);
- pid_t pid;
- if((pid=fork()) < 0){
- exit(-1);
- }
- if(pid==0){
- kill(getppid(), SIGCHLD);
- sleep(1);
- union sigval val;
- val.sival_int = 0;
- sigqueue(getppid(), SIGCHLD, val);
- sleep(1);
- }else{
- int n = 5;
- while(1){
- n = sleep(n);
- if(n > 0){
- printf("%d left\n", n);
- continue;
- }
- break;
- }
- }
- return 0;
- }
- ~
复制代码 info->si_code = 0
info->si_code = -1
4 left
info->si_code = 1
3 left |
|