我遇到问题,我需要制作一个制作9个子进程的程序,之后我必须进行3秒的倒计时并使这9个进程等待来自父亲的信号,之后收到这个信号后,每个孩子都应该说出他是什么孩子(如果他是孩子#1,#2,#3等......,按照他们的顺序)。
我所做的就是在这里,一切都很好,我想,直到我作为一个孩子要说的部分,我的号码是什么,我不知道如何做到这一点,因为每个孩子都是一个不同的过程,他们不共享记忆,信号不能使用参数,现在我在名为" handler&#的函数上打印PID。 34;,但我如何打印我的号码,作为一个孩子?。
#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);
}
答案 0 :(得分: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);
}