2017-07-23 86 views
1

我從來沒有得到過這個;我正在做一個簡單的程序:創建子進程的父進程,並在它終止之後;這是代碼叉(),一個進程不終止?

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <sys/types.h> 
#include <sys/wait.h> 



int child(pid_t pid) 
{ 
    printf("process %d is terminating\n",pid); 
    exit(EXIT_SUCCESS); 
} 

int main() 
{ 
    int i; 
    for(i = 0; i < 2; i++){ 
     if(fork() == 0) 
      child(getpid()); 
    } 
    printf("father, pid=%d terminated\n",getpid()); 
    /*if(wait(NULL) == -1) 
     perror("wait");*/ 
    exit(EXIT_SUCCESS); 
} 

當我運行,所有過程打印出來,但一個過程,我想爸爸,但是我不知道,不會終止,因爲終端是活動的(不出現$); insted,如果我插入註釋行等待,程序運行正常;爲什麼這個?

terminal output

+0

你可以發佈你看到的終端輸出嗎? –

+0

添加它;正如你所看到的,有時它運行正常,有時一個進程dosn't終止.. –

回答

0

如果你看一下屏幕捕獲最後運行,你會看到「進程8429正在終止」 終端提示已經顯示在屏幕上。

看上去發生的事情是你的「父親」進程恰好先退出,然後你的shell輸出提示符。然後,在最後一種情況下,子進程(PID 8429)打印其輸出並退出。

因此它正在終止,但有時子進程不會終止,直到父進程退出並且您的shell進程已經打印提示。

只要點擊「輸入」,當它這樣做,你應該看到一個合適的shell提示符。甚至輸入一個命令,它應該正常運行。

+0

好吧好吧這是一個愚蠢的問題..非常感謝你! :) –