我有理解這個代碼的行爲問題:不規則導致殭屍例如
#include <stdio.h>
#include <stdlib.h>
int main() {
int nr;
nr = fork();
if (nr == 0) {
/* Child process */
printf("Child process, fork return value %d\n", nr);
exit(0);
} else {
/* Parent process */
printf("Parent process, fork return value: %d\n", nr);
exit(0);
}
}
在Unix shell中運行。當我得到這樣的結果:
Parent process, fork return value: 343
Child process, fork return value: 0
但有時它只是給了我這個結果沒有任何shell提示符:
Child process, fork return value: 0
我知道它可以用父進程中的wait()函數來解決。但我想知道:
爲什麼結果不規則?有人能解釋發生了什麼嗎?子進程成爲殭屍,但爲什麼父母不處理printf()函數調用運行?
我想這對Linux和永遠無法看到你的描述。相反,我總是得到兩個消息。我甚至試圖給父親和/或孩子安排睡眠,但除了預期的延誤之外,沒有任何改變。從理論上講,我也找不到你的觀察結果。你介意告訴我們你的系統發生了什麼? – Alfe
父進程也應該打印該消息。殭屍進程是當父進程在父進程「等待」之前完成執行的時候。 printf在它變成'殭屍進程'之前執行。父母應該打印它的消息,不管子進程是什麼......在叉子共享相同的'stdout'之後,他們是獨立的進程,因爲你沒有重定向。 –