簡體   English   中英

C-使用fork()創建3個子進程

[英]C - Create 3 child processes with fork()

我想用fork()創建3個子進程。 這是創建一個子進程的代碼:

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

void main(){
    int pid = fork();
    if(pid < 0){
        /* was not successfully */
    }
    else if (pid > 0){
        /* Parent process */
    }
    else{
        /* Child process */
        for (int i = 0; i < 20; i++){
            printf("1");
            usleep(1000);
        }
        exit(0);
    }
}

子進程應打印數字1的20倍,並在每次之后休眠1毫秒。

我知道我不能只使用fork()3次,因為那樣我將獲得7個子進程。 但是我怎樣才能准確地得到3? 我該怎么做,每個子進程都打印另一個數字? 例如,第一個過程編號為1,第二個過程編號為2,第三個過程編號為3。

父母應該使用waitpid()等待所有3個孩子。 如果完成,父母應該打印一條消息。 但是如何在這里使用waitpid?

for (int kid = 0; kid < 3; ++kid) {
    int pid = fork();
    if(pid < 0){
        exit(EXIT_FAILURE);
    }
    else if (pid > 0){
        /* Parent process */
    }
    else{
        /* Child process */
        exit(EXIT_SUCCESS);
    }
}

for (int kid = 0; kid < 3; ++kid) {
    int status;
    pid_t pid = wait(&status); // kids could be ready in any order
}

您可以使用fork 3次,但必須確保只從父進程中調用fork。

最簡單的方法是確保孩子永遠不會逃離其{}區塊。

if((pid = fork())<0) /*handle error*/;
if(pid == 0){
   //do child stuff

   exit(0); //the child must not escape this {} block
}
//do parent stuff

waitpid(2)很簡單。

暫無
暫無

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

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