簡體   English   中英

分叉后退出子進程

[英]Exit a child process after forking

我有這個代碼,它的目標是創建N個子進程並打印出每個PID和進程號。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void childProcess(int num)
{
    pid_t pid = fork();

    printf("Hello! I am process no. %d! my PID is %d!\n", num, pid);
}

int main()
{
    int i = 0;

    for(i = 1; i <= 5; i++)
    {
        childProcess(i);
        _exit(3);
    }
    exit(0);
}

嘗試多種方法后,但是:如exit VS _exi T,遞歸的childProcesspid = wait() ,我仍然無法順利建立僅5進程。 到目前為止,我的輸出是這樣的代碼:

Hello! I am process no. 1! my PID is 96196!
Hello! I am process no. 1! my PID is 0!

我不確定如何正確退出子進程。 沒有退出代碼就會創建N! 流程。

您正在退出子進程,只是您在錯誤的時間執行此操作。 在fork()之后,每個子進程都保持與父進程相同的循環,創建另一個子進程,這就是為什么你最終擁有它們的原因。

正確的代碼將是這樣的:

for (int i = 0; i < 5; i++) {
  if (fork() == 0) {
    // child process
    printf("I'm child %d, my pid is %d\n", i, getpid());
    exit(0);
  }
  // parent process keeps running the loop
}

fork()將您的進程拆分為兩個進程,父進程和子進程。 您需要在childProcess()中對其返回值進行某種測試,以確定您是在父級還是子級中。 如果pid是0那么你就在孩子身上; 如果非零,那么你在父母。 基於此,您將有條件地退出該計划。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM