子进程的返回值问题status
最近有一个程序,转移到另一台服务器上了,在接受返回值的时候一直出问题。
waitpid(pid, &status, WNOHANG);
WEXITSTATUS(status)老实返回16,郁闷。
最后发现是信号的问题。在fork子进程前,添加对子进程的信号接受就可以了。
signal(SIGCHLD,SIG_DFL);
最近有一个程序,转移到另一台服务器上了,在接受返回值的时候一直出问题。
waitpid(pid, &status, WNOHANG);
WEXITSTATUS(status)老实返回16,郁闷。
最后发现是信号的问题。在fork子进程前,添加对子进程的信号接受就可以了。
signal(SIGCHLD,SIG_DFL);
#include#include #include int main(void) { pid_t pid; printf("father-pgrpid=[%d]n", getpgrp()); pid = fork(); if (pid < 0) { printf("fork errn"); } else if (pid == 0) { setpgrp(); printf("child-pid[%d]n", getpid()); printf("child-pgrpid=[%d]n", getpgrp()); if(pid=fork() <0) { printf("fork errn"); }else if (pid == 0) { while(1) sleep(10); exit(0); } sleep(100); exit(1); }else{ sleep(1); printf("fathern"); if(kill(-pid, SIGTERM) != 0) { perror("kill"); }else{ printf("killed okn"); } } }