子进程创建
用 fork()
创建子进程, 若成功创建, 其返回值:
- 对于父进程, 其返回值为子进程的 pid
- 对于子进程, 其返回值为 0
- 若创建失败, 返回值为 -1
可以利用返回值来让父/子进程完成不同的操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #include <stdio.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h>
int main(int argc, char const *argv[]) { pid_t cid;
printf("Before fork Process id: %d\n", getpid());
cid = fork();
if (cid == 0) { printf("Child process id (my parent pid is %d):\ %d\n", getppid(), getpid()); printf("Child do!"); } else { printf("Parent process id: %d\n", getpid()); printf("Parent do!");
wait(NULL); }
return 0; }
|
getpid()
用于获取当前进程 pid
getppid()
用于获取父进程 pid
wait(Null)
会让父进程等待子进程结束后再返回 (也就是主动进入 waiting 状态)
若观察进程的交替, 可以这样写:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #include <stdio.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h>
int main(int argc, char const *argv[]) { pid_t cid;
printf("Before fork Process id: %d\n", getpid());
cid = fork();
if (cid == 0) { printf("Child process id (my parent pid is %d):\ %d\n", getppid(), getpid()); for (int i=0; i<3000; i++) { printf("Child do!\n"); } } else { printf("Parent process id: %d\n", getpid()); for (int i=0; i<3000; i++) { printf("Parent do!\n"); }
wait(NULL); }
return 0; }
|