问题描述
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 (将#修改为@)