0条评论
#include1,进程回收wait()
进程回收wait()示例
int status;
pid_t pid;
if ((pid = fork()) < 0) {
perror(“fork”); exit(-1);
}
else if (pid == 0) {
sleep(1); exit(2);
}
else {
wait(&status); printf(“%x
”, status);
}
2,进程返回值和结束方式
status 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 含义 高8位存放:exit/_exit/return返回的值 子进程的结束方式 低7位等于零,子进程是正常结束的 低7位大于零,子进程是非正常结束的系统宏定义中status的含义
#include3,进程回收waitpid()
进程回收waitpid()示例
waitpid(pid, &status, 0);//如果该子进程没有结束,父进程就一直阻塞
waitpid(pid, &status, WNOHANG);//如果当前子进程结束了,回收成功,返回子进程的进程号;如果当前子进程没结束,父进程也会立刻返回,返回值是0
waitpid(-1, &status, 0);//pid为-1,表示回收当前进程的任意一个子进程。此时等价于wait(&status);
waitpid(-1, &status, WNOHANG);//以非阻塞方式回收当前进程的任意一个子进程