【问题标题】:How to get child process to modify link list C如何让子进程修改链接列表C
【发布时间】:2012-02-15 08:54:02
【问题描述】:

您好,我有一个程序需要子进程来修改父进程跟踪的链接列表。基本上在父进程中,我有一个信号处理程序,例如 ..

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 是修改函数。然后我有一个父进程包含的全局链表,称为结构连接客户端。我用来修改链接列表的函数有效,但是当我调用信号处理程序时...

if(!fork){
raise(SIGUSR1);
exit(0);
} 

而我 fork(),fork(),... fork(),父进程不记得以前的 fork,就像某些东西被重置了,链接列表又重新开始了。有什么我想念的吗?

谢谢

【问题讨论】:

  • 你的 !fork 应该是 !fork()。就这么简单吗?

标签: c linked-list ipc


【解决方案1】:

嗯?

您似乎忽略了每个进程在其自己的私有内存空间中运行的事实。孩子无法修改父母记忆中的任何内容。这是真的,除非你的操作系统足够基本,不支持内存保护,在这种情况下你必须说得很清楚。

您可能应该研究线程,它们是共享内存空间中的并行执行路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 2021-12-13
    • 2018-03-27
    • 2011-10-21
    相关资源
    最近更新 更多