如何解决每次子进程完成某个任务时如何向父进程发送 SIGUSR1 信号
else if (pids[i] == 0)
{
printf("Child[%d](pid):%d....Parent Pid:%d\n",i + 1,getpid(),getppid());
for (int l = 0; l < i; L++)
{
g = g->pnext;
}
while (g != NULL)
{
genome_cmp(g,mutation_array);//every time the child process finishes this function i want to Print that in the handler function
kill(pids[i],SIGUSR1);
sleep(10);
save_mutation_array(mutation_array,res,0);
free_mutations(mutation_array);
for (int j = 0; j < nr_filhos; j++)
{
g = g->pnext;
}
}
exit(0);
}
}
signal(SIGUSR1,handler);
while ((wait_lastPid = wait(&status)) > 0);
get_time_useconds(&time_usec_end);
elapsed_time = (long)(time_usec_end - time_usec_begin);
printf("Total time = %ld microseconds\n",elapsed_time);
return 0;
}
所以我在使用 SIGUSR1 获取父进程和子进程之间的连接时遇到了麻烦……我想要的是每次子进程完成函数基因组_cmp 时,子进程都会向父进程发送一个 SIGUSR1,从而触发打印的处理程序 func “比较完成”……实际发生的是,即使我创建了几个子进程,它也只打印一次。
void handler(int signum)
{
printf("%d",getpid());
if (signum == SIGUSR1)
printf("Comparassion Completed!\n");
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。