日期:2014-05-16  浏览次数:20702 次

进程间通信的思路!
大家好,我是新手!
我的程序功能是这样:父进程A,fork()一个子进程后,在子进程代码段中用execl开启另外一个程序B。
现在的需求:
1.程序B和A如何利用管道进行通信?(其实最终的目的是达到2)
2.程序A能获知B的运行状态,即是否在运行或是发生dump;当程序A关闭时,程序B能获知这一消息,关闭自身。
希望大家能给点意见,小弟感激不尽!

------解决方案--------------------
记录A的进程号,定时检查这个进程是否还在
------解决方案--------------------
那就只能记录下B的pid,然后在查询的时候去检查这个进程还在不在。
其实做成一个service就可以满足你的需求了,可以参考一下/etc/init.d下面的脚本。
脚本都支持start, stop 和status参数,正好满足你的需要。
------解决方案--------------------
管道可以啊,当读写一个对端进程已经不存在的管道,是会提示相应的错误的。可用select监控该管道的变化情况。
不过我倒是觉得你的方法更好,用信号通知.
------解决方案--------------------
我觉得也可以自己实现一个心跳检测呢?定时点子进程的名,看看还在不在?
------解决方案--------------------
探讨
引用:
C/C++ codeint ok = -1;
void handler(int signo)
{
if( -1 != ok )
{
exit(0);
}
}
int main(int argc, char* argv[])
{
pid_t pid;
int i;
pid_t pp = getpid();
if( 0 == (pid = fork()) )
{
signal(SIGCHLD,handler);
ptrace(PTRACE_ATTACH, pp, NULL, NULL);
wait(NULL);
ptrace(PTRACE_CONT, pp, NULL, NULL);
ok = …


呵呵,谢谢你的帮助。你的方法与我原来在父进程中…