gpt4 book ai didi

c++ - 使用 fork() 的子进程和父进程

转载 作者:行者123 更新时间:2023-11-30 19:18:45 24 4
gpt4 key购买 nike

我遇到了问题,我需要编写一个程序来创建 9 个子进程,之后我必须倒计时 3 秒,并使这 9 个进程在收到此信号后等待来自父进程的信号信号,每个 child 都应该说出他是什么 child (如果他是 child #1,#2,#3,等等......,按照他们被创造的顺序)。

我所做的就在这里,一切都很好,我想,直到我作为一个 child 必须说的部分,我的号码是多少,我不知道该怎么做,因为每个 child 是一个不同的进程,它们不共享内存,并且信号不能为此使用参数,现在我正在名为“handler”的函数上打印 PID,但是作为 child ,我如何打印我的号码? .

#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);
}

最佳答案

创建全局变量:

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);
}

关于c++ - 使用 fork() 的子进程和父进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26311379/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com