1
如何識別子進程與其子進程?識別子進程的子進程?
pid_t pid = fork();
if (pid == 0) // child 1
{
int pid2 = fork();
if (pid2 == 0)// child of child 1
{ ....
我們如何區分孩子1和孩子?他們都有相同的PID 0?
如何識別子進程與其子進程?識別子進程的子進程?
pid_t pid = fork();
if (pid == 0) // child 1
{
int pid2 = fork();
if (pid2 == 0)// child of child 1
{ ....
我們如何區分孩子1和孩子?他們都有相同的PID 0?
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
}
我不知道我理解你的問題。孫子女將把'pid'和'pid2'都設爲0。直接孩子只會有'pid'爲0. – StoryTeller
如果'pid2'爲零,那麼你就在孩子的「孫子」中。無論您何時何地稱呼「叉子」,或者與孩子的數量有多深度無關。如果'fork'返回零,那麼你處於調用'fork'的進程的子進程中。 –
是的,但是有一些標識我們在哪個級別的ID?這是第一個還是第n個孩子? – Bionix1441