hello~ 很高兴见到大家! 这次带来的是Linux系统中关于进程控制这部分的一些知识点,如果对你有所帮助的话,可否留下你宝贵的三连呢? 个 人 主 页: 默|笙
接上次博客---->[进程控制(1)进程创建、终止]。

#include<sys/wait.h>
2 #include<stdio.h>
3 #include<unistd.h>
4 #include<stdlib.h>
5
6 int main()
7 {
8 pid_t id = fork();
9 if (id == 0)
10 {
11 int cnt = 5;
12 while(cnt--)
13 {
14 printf("我是一个子进程!pid:%d, ppid:%d\n", getpid(), getppid());
15 }
16 exit(0);//子进程执行完退出
17 }
18 sleep(10);
19 pid_t sid = wait(NULL);
20 if (sid > 0)
21 {
22 printf("我是一个父进程!pid:%d,我等待成功了,回收的是pid为%d> 的子进程\n",getpid(), sid);
23 }
24 return 0;
25 }



阻塞等待vs非阻塞等待
//非阻塞状态实验代码
1 #include<stdio.h>
2 #include<unistd.h>
3 #include<stdlib.h>
4 #include<sys/wait.h>
5
6 int main()
7 {
8 pid_t id = fork();
9 if (id == 0)
10 {
11 int cnt = 5;
12 while(cnt--)
13 {
14 sleep(1);
15 printf("我是一个子进程,pid:%d, ppid: %d\n", getpid(),getppid());
16 }
17 exit(0);
18 }
19 while(1)
20 {
21 pid_t sid = waitpid(id, NULL, WNOHANG);
22 if (sid == 0)
23 {
24 printf("我是父进程,子进程还没执行完,我要干我自己的事情了\n");
25 //写父进程等待期间要执行的代码
26 }
27 else if (sid > 0)
28 {
29 printf("我是父进程,我回收成功了!pid:%d\n", getpid());
30 exit(0);
31 }
32 }
33 return 0;
34 }

1 #include<stdio.h>
2 #include<unistd.h>
3 #include<stdlib.h>
4 #include<sys/wait.h>
5
6 int main()
7 {
8 pid_t id = fork();
9 if (id == 0)
10 {
11 int cnt = 5;
12 while(cnt--)
13 {
14 sleep(1);
15 printf("我是一个子进程,pid:%d, ppid: %d\n", getpid(), getppid());
16 }
17 exit(0);
18 }
19 while(1)
20 {
21 int* status = NULL;
22 pid_t sid = waitpid(id, status, WNOHANG);
23 if (sid == 0)
24 {
25 // printf("我是父进程,子进程还没执行完,我要干我自己的事情了\n");
26 //写父进程等待期间要执行的代码
27 }
28 else if (sid > 0)
29 {
30 printf("我是父进程,我回收成功了!pid:%d\n", getpid());
31 printf("我是父进程,WIFEXITED:%d, WEXITSTATUS:%d\n", WIFEXITED(status), WEXITSTATUS(status));
32 exit(0);
33 }
34 }
35 return 0;
36 }
今天的分享就到此结束啦,如果对读者朋友们有所帮助的话,可否留下宝贵的三连呢~~ 让我们共同努力, 一起走下去!