2015-10-11 64 views
1

我在我的主下面的代碼:Ç - 在printf的c問題終端

//testing with fork 
printf("I am process: %d\n", getpid()); 
pid_t pid = fork(); 
printf("Now I am process: %d\n", getpid()); 
printf("fork returned %d\n", pid); 
if(pid == 0){ 
    printf("I am child %d\n", getpid()); 
} 

但是我的終端上的輸出給了我這樣的: terminal output pic

我跑我的程序用的PARAM 'config_file.txt',你可以在第一行看到,其餘部分打印出來直到它碰到fork,並且我的cmd行出現在它之間......關於爲什麼是這樣或者我可以怎樣做的任何想法修理它?代碼有問題嗎?我只是遵循一個簡單的分叉教程。

編輯:另外,運行後,我的程序掛在那裏,我不得不打回車讓我的CMD線恢復。

+0

歡迎堆棧溢出。我調整了英文,並粗體顯示了「編輯」。這是通過使用兩個星號來完成的。請盡力輸入您看到的文字,而不是使用鏈接。你必須努力使其他人更容易幫助你。 –

+0

@RohitGupta感謝您的信息和編輯。至於「鏈接」,因爲我還很初級,Stack Overflow不允許我在我的文章中嵌入圖片,而是爲它創建了一個鏈接。由於它是一個終端輸出,而且它看起來是錯誤的終端輸出,所以我覺得它的一張照片會更好地告訴任何願意幫助我的人。如果這個問題與終端本身無關,那麼我肯定會輸出它。謝謝你的時間。 –

+0

基於此我已提高您的問題 –

回答

1

發生了什麼事是父進程在子進程之前完成。當父節點完成時,顯示提示符,但是由於子節點仍在運行,它將繼續將輸出打印到控制檯。

如果您希望父等到孩子完成後,使用wait()功能:

printf("I am process: %d\n", getpid()); 
pid_t pid = fork(); 
printf("Now I am process: %d\n", getpid()); 
printf("fork returned %d\n", pid); 
if(pid == 0){ 
    printf("I am child %d\n", getpid()); 
} else { 
    wait(NULL); 
} 
+0

啊,我明白了 - 謝謝!我正在關注YouTube教程,並且那個人對於相同的代碼沒有任何問題 - 猜猜他的孩子在他父母面前完成了。 –