一步一步学Linux C:关于进程等待
一步一步学Linux C:关于进程等待
- #include <sys/types.h>
- #include <stdio.h>
- #include <sys/wait.h>
- void check_exit(int status);
- main()
- {
- pid_t pid;
- int status;
- if((pid = fork()) < 0)
- {
- printf("fork error!!\n");
- exit(0);
- }
- else if(pid == 0)
- {
- printf("child process exit\n");
- exit(0);
- }
- else
- {
- if(wait(&status) != pid)
- {
- printf("wait error!!");
- exit(0);
- }
- check_exit(status);
- }
- }
- void check_exit(int status)
- {
- if(WIFEXITED(status))
- printf("eixt\n");
- else if(WIFSIGNALED(status))
- printf("killed by signal\n");
- else if(WIFSTOPPED(status))
- printf("stopped by signal\n");
- else if(WIFCONTINUED(status))
- printf("continued");
- }
等待进程改变其状态。所有下面哪些调用都被用于等待子进程状态的改 变,获取状态已改变的子进程信息。状态改变可被认为是:1.子进程已终止。2.信号导致子进程停止执行。3.信号恢复子进程的执行。在子进程终止的情况 下,wait调用将允许系统释放与子进程关联的资源。如果不执行wait,终止了的子进程会停留在"zombie"状态。
如果发现子进程改变了状态,这些调用会立即返回。反之,调用会被阻塞直到子进程状态改变,或者由信号处理句柄所中断(假如系统调用没有通过sigaction的SA_RESTART标志重启动)。
wait 系统调用挂起当前执行中的进程,直到它的一个子进程终止。waitpid挂起当前进程的执行,直到指定的子进程状态发生变化。默认,waitpid只等待 终止状态的子进程,但这种行为可通过选项来改变。waitid系统调用对于等待哪个子进程状态改变提供了更精确的控制。
|
评论暂时关闭