进程等待wait,waitpid
2016-11-24 23:37
447 查看
wait函数
wait函数用于等待子进程中断或者结束。wait()函数会暂时停止目前进程的执行,直到有信号来到或者子进程结束为止。如果在调用wait()时子进程已经结束,则wait()会立即返回子进程结束状态值。子进程的结束状态值会由参数status返回,而子进程的进程识别码也会一起返回。如果不在意结束状态值,则参数status可以设成NULL。子进程的结束状态值请参考waitpid()。
waitpid函数
可以看个实际的例子。#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #include <sys/wait.h> void die(const char *msg) { perror(msg); exit(1); } void child2_do() { printf("In child2: execute 'date'\n"); sleep(5); if (execlp("date", "date", NULL) < 0) { perror("child2 execlp"); } } void child1_do(pid_t child2, char *argv) { pid_t pw; do { if (*argv == '1') { pw = waitpid(child2, NULL, 0); } else { pw = waitpid(child2, NULL, WNOHANG); } if (pw == 0) { printf("In child1 process:\nThe child2 process has not exited!\n"); sleep(1); } }while (pw == 0); if (pw == child2) { printf("Get child2 %d.\n", pw); sleep(5); if (execlp("pwd", "pwd", NULL) < 0) { perror("child1 execlp"); } } else { printf("error occured!\n"); } } void father_do(pid_t child1, char *argv) { pid_t pw; do { if (*argv == '1') { pw = waitpid(child1, NULL, 0); } else { pw = waitpid(child1, NULL, WNOHANG); } if (pw == 0) { printf("In father process:\nThe child1 process has not exited.\n"); sleep(1); } }while (pw == 0); if (pw == child1) { printf("Get child1 %d.\n", pw); if (execlp("ls", "ls", "-l", NULL) < 0) { perror("father execlp"); } } else { printf("error occured!\n"); } } int main(int argc, char *argv[]) { pid_t child1, child2; if (argc < 3) { printf("Usage: waitpid [0 1] [0 1]\n"); exit(1); } child1 = fork(); if (child1 < 0) { die("child1 fork"); } else if (child1 == 0) { child2 = fork(); if (child2 < 0) { die("child2 fork"); } else if (child2 == 0) { child2_do(); } else { child1_do(child2, argv[1]); } } else { father_do(child1, argv[2]); } return 0; }
相关文章推荐
- 等待子进程结束wait()和waitpid()
- 进程等待 wait和waitpid
- wait,waitpid,waitid————等待进程改变状态
- linux 进程等待 wait 、 waitpid
- 关于wait(),waitpid()等待子进程的理解 xK)ib!BdmJYr
- 进程的等待(wait和waitpid)
- linux 进程等待 wait 、 waitpid
- 【经典转载】Linux进程学习系列之五 等待进程结束wait()和waitpid()函数
- Linux 等待进程结束 wait() 和 waitpid()
- 等待进程结束wait,waitpid
- linux下的进程等待(wait和waitpid)
- 进程等待与wait&waitpid
- 进程环境与进程控制(3): 等待子进程wait/waitpid
- 进程等待示例(wait与waitpid调用)
- 父进程等待子进程结束 waitpid wait
- Linux--等待进程结束wait()和waitpid()
- Linux--等待进程结束wait()和waitpid()
- 僵尸进程 wait() waitpid()
- 僵尸进程 wait() waitpid()
- 进程的等待wait() --多进程编程