2014-10-18 74 views
0

我在孩子中以-1退出,但父母取而代之。有沒有辦法讓父母識別-1?這裏是我的代碼分叉的孩子以-1退出,但WEXITSTATUS獲得255

pid = fork(); 

    // if fork fails 
    if (pid < 0){ 
    exit(EXIT_FAILURE); 
    } 
    else if (pid == 0){ 
    // purposely exit 
    _exit(-1); 
    } 
    else{ 
    int status; 
    int corpse = wait(&status); 
    if (WIFEXITED(status)) 
    { 
     int estat = WEXITSTATUS(status); 
     if (estat == 0){ 
     printf("Command was successfully executed\n"); 
     } 
     else{ 
     printf("Error: child exited with status %d\n", estat); 
     } 
    } 
    else 
     printf("signalled\n", corpse); 
+1

「WEXITSTATUS」中返回變量的類型是什麼? – IllusiveBrian 2014-10-18 02:35:13

+0

無符號十進制整數?我如何將它轉換爲-1? – Mariska 2014-10-18 02:39:19

回答

1

wait

WEXITSTATUS(status)

回報孩子的退出狀態。這包括子句 在調用exit(3)或_exit(2)時指定的狀態參數的 最低有效8位,或者用於main()中的return語句的參數 。這個宏應該是 只有當WIFEXITED返回true時才使用。

-1的至少顯著8位是0xFF255)。

0

的狀態從功能wait包含的不僅是子進程的退出代碼信息返回,但也包含了終止的原因,等等。因此,不可能獲得子進程的確切退出代碼,並且僅表示子代退出代碼的最少8位。

0

wait()後的狀態將爲0xFF00。