Я хочу создать N детей из родителя. Я хочу, чтобы все дети начали (функция - измерять время) одновременно. Поэтому я помещаю функцию в обработчик сигнала, и когда родительский закончить создание (fork) всех дочерних элементов, он отправляет сигнал (используя kill (children_id)) всем детям, чтобы начать старт. Код ниже, но он не работает должным образом. В частности, он разветвлял всех детей, но не выполняет функцию «measure_time» вообще. Эта функция не делает, а записывает время выполнения и распечатывает. Может ли кто-нибудь сообщить мне, если я что-то делаю неправильно?Сделайте процесс обработки детей до получения сигнала родителя
int n_task = 4;
for (i = 0; i < n_task; i++){
pid = fork();
if (pid < 0){
printf("cannot fork!\n");
} else
if (pid == 0){ //child
printf("printed from child [%d]\n", getpid());
signal(SIGUSR1, measure_time); //measure_time is a function
exit(0);
} else {
pid_array[i] = pid;
}
}
//This code is executed from parent only
for (int i = 0; i < n_task; i++)
{
kill(pid_array[i], SIGUSR1);
}
Любая причина, по которой вы используете 'fork()', а не pthreads? –
@jeffamaphone: это упражнение, которое требует использования 'fork()' и 'signal()' или 'sigaction()' и 'kill()'? Вероятно, достаточная причина. –
Да, я просто пытаюсь играть с fork(). – Zk1001