c++ - कांटा के साथ बाल और जनक प्रक्रिया()



operating-system fork (1)

एक वैश्विक चर बनाएँ:

int my_number;

फिर अपने लूप में जो बच्चों को बनाता है, करते हैं:

    if (child_pid == 0) {
        my_number = i;
        break;
    }

तब आप हेन्डलर में चर का उपयोग कर सकते हैं:

void handler(int sig) {
    printf("This is Child #%d\n", my_number);

    exit(0);
}

मुझे परेशानी हो रही है, मुझे एक प्रोग्राम बनाने की ज़रूरत है जो 9 बच्चे की प्रक्रिया करता है, उसके बाद मुझे 3 सेकंड का उलटी गिनती करना पड़ता है और पिता के सिग्नल की प्रतीक्षा करने के लिए इन 9 प्रक्रियाओं को बनाने के बाद, ये संकेत मिलता है, हर बच्चों को यह कहना चाहिए कि वह कौन से बच्चे हैं (यदि वह बच्चे हैं # 1, # 2, # 3, आदि ..., क्रम में उन्हें बनाया गया था)

मैंने जो कुछ किया है, वह सब ठीक है, मुझे लगता है, जहां तक ​​मुझे बच्चों के रूप में कहना है, मेरा नंबर क्या है, मेरे पास कोई सुराग नहीं है कि यह कैसे करना है, क्योंकि प्रत्येक बच्चे अलग है प्रक्रिया, वे स्मृति साझा नहीं करते हैं और सिग्नल उसके लिए तर्क का उपयोग नहीं कर सकते हैं, अब तक मैं "हेन्डलर" नामक फ़ंक्शन पर पीआईडी ​​छपाई कर रहा हूं, लेकिन मैं एक बच्चे के रूप में अपना नंबर कैसे मुद्रित कर सकता हूं?

#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>

void handler(int x);

int main() {    
    pid_t child[9];
    pid_t child_pid;

    for (int i = 0; i < 9; ++i) {
        child_pid = fork();
        child[i] = child_pid;

        if (child_pid == 0)
            break;

        if (child_pid < 0) {
            perror("fork()");
            exit(EXIT_FAILURE);
        }
    }

    if (child_pid == 0) {
        signal(SIGUSR1, handler);
        pause();
    } else {
        printf("Countdown:\n");
        sleep(1);
        printf("3\n");
        sleep(1);
        printf("2\n");
        sleep(1);
        printf("1\n");
        sleep(1);

        for (int i = 0; i < 9; i++)
            kill(child[i], SIGUSR1); 

        waitpid(-1, NULL, 0);
    }

    return 0;
}

void handler(int sig) {
    printf("This is Child #%d\n", getpid());

    exit(0);
}




fork