当前位置: 技术问答>linux和unix
求一进程间通信方法
来源: 互联网 发布时间:2016-08-02
本文导语: 要实现两个进程间通信,进程一和进程二 要实现的: 进程一(发送数据)给进程二 进程二处理数据,(返回结果)给进程一 进程一(等待)并(接收返回结果) 我现在用msg做的: 进程一(发送数据)完成后,便...
要实现两个进程间通信,进程一和进程二
要实现的:
进程一(发送数据)给进程二
进程二处理数据,(返回结果)给进程一
进程一(等待)并(接收返回结果)
我现在用msg做的:
进程一(发送数据)完成后,便(sleep)
(sleep)完了(接收)进程二(返回来的结果)
问题是:
经常的进程一结束了,进程二还没有(返回数据);而进程二还会继续(发送消息)。
造成:进程二处理成功了,但是进程一没有(收到结果),判断为处理失败;进程二返回的消息没有被收到,这样便有了过期的消息。
我的解决:
在进程二循环末尾,查看msg_to_pross1是否为空,不为空则接收,直到其为空。这样可以回收过期的消息。
但是没法解决,(进程一延时结束,却收不到结果)这一问题。
各位有没有什么其它好的方法推荐,谢过了~~
要实现的:
进程一(发送数据)给进程二
进程二处理数据,(返回结果)给进程一
进程一(等待)并(接收返回结果)
我现在用msg做的:
进程一(发送数据)完成后,便(sleep)
(sleep)完了(接收)进程二(返回来的结果)
问题是:
经常的进程一结束了,进程二还没有(返回数据);而进程二还会继续(发送消息)。
造成:进程二处理成功了,但是进程一没有(收到结果),判断为处理失败;进程二返回的消息没有被收到,这样便有了过期的消息。
我的解决:
在进程二循环末尾,查看msg_to_pross1是否为空,不为空则接收,直到其为空。这样可以回收过期的消息。
但是没法解决,(进程一延时结束,却收不到结果)这一问题。
各位有没有什么其它好的方法推荐,谢过了~~
|
可以用信号来唤醒进程一
需要的进程号可以通过msg传递
需要的进程号可以通过msg传递
|
既然你都需要sleep了,说明你根本不需要非阻塞操作。
就就直接共享内存,然后阻塞接收数据即可。
http://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index1.html
就就直接共享内存,然后阻塞接收数据即可。
http://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index1.html
|
用信号更安全,
先用sigprocmask阻塞一些信号
然后用sigsuspend去等待某个信号的发生。
这个在进程的同步上很有用
先用sigprocmask阻塞一些信号
然后用sigsuspend去等待某个信号的发生。
这个在进程的同步上很有用
|
可以参考《AUPE》第十章的内容
|
用SOCKET最好。