2015-10-04 68 views
-4
#include<stdio.h> 
#include<sys/types.h> 
#include<unistd.h> 

int main() 
{ 
    int status; 
    int pid = fork();assigned to variable "pid" 

    if(pid == 0)  
    { 
     printf("I am the child with pid = %d\n", getpid()); 
    } 
    else 
    { 
     printf("I am the parent with pid = %d\n", getpid()); 
     waitpid(pid, &status, 0); // line 51 
    } 
    return 0; 
} 

在第51行,請說明「pid」參數。這個過程將等待什麼?waitpid()的參數

+0

用於在此處逐字複製家庭作業:-1 –

回答

1

fork返回0爲子進程,-1出錯,以及父進程的其他內容。 else開始爲父進程的部分,這意味着waitpid包含孩子的PID。

援引man wait

waitpid()系統調用掛起調用 過程 的執行,直到通過pid參數指定的子狀態發生了改變。默認情況下, waitpid()等待只爲終止的孩子,但這種行爲是通過options參數國防部 - ifiable [...]

總之,waitpid等待子進程終止。

0

如果分支是成功的,則分叉將0返回給子分支,並將新分叉的子分支過程的(正)pid返回給父分支。在此聲明中,父母等待孩子的終止。

0

成功叉子將返回子ID父和0到孩子,

waitpid(pid, &status, 0);

  1. parameter ..)pid - 特定的孩子ID。
  2. 參數..)&狀態 - 退出狀態,將通過孩子
  3. 參數。)選擇

0發送到父 - 選項表示 家長會等到孩子被終止。