Linux下子進程與父進程的關系
我們知道,Linux下父進程可以使用fork 函數創建子進程,但是當父進程先退出后,子進程會不會也退出呢?到底Linux下父進程和子進程的關系如何呢?下文為大家分享最新代碼如下:
通過下面這個小實驗,我們能夠很好的看出來:
復制代碼
/******** basic.c ********/
1 #include "basic.h"
2
3 pid_t Fork(void)
4 {
5 pid_t pid = fork();
6 if (pid < 0) {
7 fprintf(stderr, "Fork error: %s\n", strerror(errno));
8 exit(0);
9 }
10
11 return pid;
12 }
復制代碼
1 ********** basic.h ***********
2
3 #ifndef __CSAPP_BASIC_H
4 #define __CSAPP_BASIC_H
5
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 /* function definition concerned with basic.c */
13 pid_t Fork();
14
15 #endif
復制代碼
1 ******* fork.c *********
2
3 #include "basic.h"
4
5 int main()
6 {
7 int pid = Fork();
8 int x = 2;
9
10 if (pid == 0) {
11 printf("child: pid = %d, ppid = %d, x = %d\n", getpid(), getppid(), ++x);
12 sleep(3);
13
14 printf("child: pid = %d, ppid = %d, x = %d\n", getpid(), getppid(), ++x);
15 exit(0);
16 }
17
18 printf("parent: pid = %d, ppid = %d, x = %d\n", getpid(), getppid(), --x);
19
20 }
通過 gcc fork.c basic.c -o fork 編譯即可的 fork 程序。 運行 ./fork
可以看出父進程首先退出,退出前child的'PPID為12256, 退出后子進程的PPID變為了 1.說明父進程退出后的子進程由 init 超級進程1領養。而該進程是不絕不會退出的。
【Linux下子進程與父進程的關系】相關文章:
Linux進程關系最新解讀201605-25
Linux系統守護進程的啟動方法05-17
關于linux查看進程ps top區別09-30
多進程OSPF及進程號的意義11-12
Linux讓進程在后臺可靠運行的幾種方法08-27
常見系統進程大全10-11
圍棋棋局的進程劃分10-08
如何避免出現僵尸進程10-05
php多進程編程詳解201711-12