У меня возникают проблемы, мне нужно создать программу, которая выполняет 9 дочерних процессов, после чего я должен поставить отсчет 3 секунды и заставить эти 9 процессов ждать сигнала от отца, после того, как они получают этот сигнал, каждый ребенок должен сказать, какими детьми он является (если он является детьми № 1, № 2, № 3 и т. д.), чтобы они были сделаны).Ребенок и родительский процесс с fork()
Что я делаю здесь, все в порядке, я думаю, до той части, где я должен говорить как дети, каково мое число, я не знаю, как это сделать, потому что каждый дети - это другой процесс, они не обмениваются памятью, и сигнал не может использовать аргументы для этого, теперь я печатаю PID для функции, называемой «обработчик», но как я могу напечатать свой номер в качестве «Дети» ?.
#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);
}
У ребенка есть копия родительской памяти. Поэтому он может получить доступ к переменной цикла 'i', чтобы получить ее номер. – Barmar
Возможный дубликат [Child and Parent pid with fork();] (http://stackoverflow.com/questions/26310824/child-and-parent-pid-with-fork) –
@MikeW Это похоже на дубликат этого вопроса, но ответ там никогда не показывает, как решить проблему. – Barmar