您好我有一个程序需要子进程来修改父进程跟踪的链接列表。基本上在父进程中我有一个信号处理程序,如..
struct sigaction sa;
sa.sa_handler = someFunction;
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_RESTART;
if(sigaction(SIGUSR1, &sa, NULL) == -1){
printf("We have a problem, sigaction is not working.\n");
perror("\n");
exit(1);
}
sa_handler是修改函数。然后我有一个全局链表,父进程包含名为struct conectionClient。我用来修改链接列表的函数可以正常工作,但是当我在...中调用信号处理程序时
if(!fork){
raise(SIGUSR1);
exit(0);
}
而我fork(),fork(),... fork(),父进程不记得以前的forks就像重置了一样,链接列表重新开始。有什么东西我不见了吗?
由于
答案 0 :(得分:2)
咦?
您似乎错过了每个进程都在其自己的私有内存空间中运行的事实。孩子无法修改父母记忆中的任何内容。除非您的操作系统基本不足以支持内存保护,否则这是真的。在这种情况下,您必须非常清楚地说明。
您应该查看线程,它们是共享内存空间中的并行执行路径。