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: %sn", 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 = %dn", getpid(), getppid(), ++x);
12 sleep(3);
13
14 printf("child: pid = %d, ppid = %d, x = %dn", getpid(), getppid(), ++x);
15 exit(0);
16 }
17
18 printf("parent: pid = %d, ppid = %d, x = %dn", getpid(), getppid(), --x);
19
20 }
通過 gcc fork.c basic.c -o fork 編譯即可的 fork 程序。 運行 ./fork
可以看出父進程首先退出,退出前child的`PPID為12256, 退出後子進程的PPID變為了 1.説明父進程退出後的子進程由 init 超級進程1領養。而該進程是不絕不會退出的。
-
Linux文件系統掛裝與高層體系結構
WindowsXP高昂的價格和升級收費政策使更多企業和個人用户轉向自由開放的Linux操作系統,目標僱主羣會迅速增長。下面是小編整理的關於Linux文件系統掛裝與高層體系結構,希望大家認真閲讀!文件系統體系結構既然已經看到了文件系統的構造方法,現在就看看Linux文件系...
-
linux常用命令記錄大全
Linux雖然是免費的,但它的確是一個非常優秀的操作系統,與MS-WINDOWS相比具有可靠、穩定、速度快等優點,且擁有豐富的根據UNIX版本改進的強大功能。下面讓我們一起來學習Linux的一些主要命令。有一點一定要注意,和dos命令不同的是,Linux的命令(也包括文件名等等)對...
-
Linux技巧總結
1、處理特殊的文件名假設Linux系統中有一個文件名叫-aaa,如果我們想對它進行操作,例如現在要刪除它,如果我們按照一般的刪除方法在命令行中輸入rm-aaa命令,界面將會提示我們是無效選項(invalidoption),原來由於文件名的第一個字符為-,Linux把文件名當作選項了,我們可...
-
即時科研集團的Linux認證體系
即時科研集團首開先河,在國內推出一套全面完善的Linux認證體系——ThizBEST認證。這套認證體系滿足了中國培養不同層次Linux人才的需要。即時自由軟件教育聯盟將在其全國範圍的聯盟體系內推出這套為全方位Linux人才定製的ThizBEST認證體系。ThizBEST...