主进程发给子进程的消息问题

8thdetective 2005-02-25 09:25:23
我在fork子进程的时候做了下面操作
先将子进程的信息通过主进程添加完毕,然后发kill消息给正在等待的子进程让他执行。
但现在的问题是,我的kill消息比子进程的signal还要早到达了子进程,子进程收到就退出了。。。。
请问怎么办?
if((pid=fork()==0)//child
{
writelog();
signal(SIGUSR2,emptyfunc);
sleep(1000);
...//开始操作

}else if(pid>0)//father
{
writelog(...);//父进程先添加子进程的进程号等信息
kill(pid,SIGUSR2);
......
}
...全文
126 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tcprince 2005-02-25
  • 打赏
  • 举报
回复
父子进程之间可以用管道同步一下
dr168 2005-02-25
  • 打赏
  • 举报
回复
出现竞态现象,可以一些ipc(管道,msg,signal)等适应wait,tell方式避免竞态现象
ringerxyz 2005-02-25
  • 打赏
  • 举报
回复
你的情况其实用信号量可能更合适些,非要用signal?那你可以在child里完成writelog后给parent发送消息,比如SIGUSR1,然后在parent里该信号的处理函数中再发信号给child
8thdetective 2005-02-25
  • 打赏
  • 举报
回复
writelog里面是child添加进程号和时间等信息。
上面的代码,我怕这样的话在子进程writelog的时候主进程发kill给它就麻烦了
ringerxyz 2005-02-25
  • 打赏
  • 举报
回复
signal(SIGUSR2,emptyfunc);

if((pid=fork()==0)//child
{
writelog();

pause();
...//开始操作

}else if(pid>0)//father
{
writelog(...);//父进程先添加子进程的进程号等信息
kill(pid,SIGUSR2);
......
}
看看上面的代码行不?
ringerxyz 2005-02-25
  • 打赏
  • 举报
回复
writelog();里执行什么操作?
发信号的目的是什么?
8thdetective 2005-02-25
  • 打赏
  • 举报
回复
我现在先用ringerxyz(rin) 的这段程序试试,把writelog写在pause的后面,这样出现问题的可能性应该小一些了。。。

23,110

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧