2017-01-23 67 views
1

如何識別子進程與其子進程?識別子進程的子進程?

pid_t pid = fork(); 
if (pid == 0) // child 1 
{ 
    int pid2 = fork(); 
    if (pid2 == 0)// child of child 1 
    { .... 

我們如何區分孩子1和孩子?他們都有相同的PID 0?

+0

我不知道我理解你的問題。孫子女將把'pid'和'pid2'都設爲0。直接孩子只會有'pid'爲0. – StoryTeller

+0

如果'pid2'爲零,那麼你就在孩子的「孫子」中。無論您何時何地稱呼「叉子」,或者與孩子的數量有多深度無關。如果'fork'返回零,那麼你處於調用'fork'的進程的子進程中。 –

+0

是的,但是有一些標識我們在哪個級別的ID?這是第一個還是第n個孩子? – Bionix1441

回答

1

fork()返回值: 0 - 在子進程中; PID - >父進程中的子PID; -1 - >通過getpid()

if (pid == 0) { 
    pid_t child_pid = getpid(); 
} 

你的代碼的一些細節錯誤

可以在子過程中得到PID:

pid_t pid = fork(); 
if (pid == 0) // child 1 
{ 
    // child process 
    pid_t p = getpid(); // Child process pid 
    int pid2 = fork(); 
    if (pid2 == 0) { 
    // child of child process 
    pid_t p = getpid(); // Child of child process pid 
    } else if (pid2 > 0) { 
    // Still child process 
    //pid2 -> child of child PID 
    } 
} else if (pid > 0) { 
    // Still main process 
    // pid -> child PID 
    pid_t p = getpid(); // Main process pid 
}