我想从一个父进程创建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()
而不是pthread有任何原因吗? - i_am_jorffork()
和signal()
或sigaction()
和kill()
的练习吗?可能足够的理由了。 - Jonathan Leffler