请教xtang进程间传递消息的方法

一个父进程创建了好多子进程,其中一个子进程monitor用来监视其他子进程是否死亡,我应该怎么做呢,在qnx4中专门有一个函数来通知内核,在qnx6中不再支持类似的这些函数,那我应该怎么做呢?求救!谢谢各位高手!

自己做不行吗?每个子进程正常时定时向其对应的标志位写1,monitor子进程定时查询,如果正常将其清为0,如果N次查询总是0,则认为此子进程DEAD.

这个不是很好。那些是不同的进程,要用共享内存才能互相读写标志位。

有几个方案可行。

1)用父进程来做monitor。因为所有子进程死亡的时候,都会向父进程发一个SIGCHILD。父进程设这个signal handler,就可以知道什么时候子进程死亡了。这个是POSIX的标准。

2)所有需要被监视的进程,都同monitor进程建立一个联接。(monitor去登录一个/dev/monitor,然后所有要被监视的进程,都去open(/dev/monitor, )而建立联接。这样,如果被监视进程死亡,monitor会收到一个pulse或是_IO_CLOSE。(参看
http://www.openqnx.com/chinese/viewtopic.php?t=686

3)与QNX4那个最接近的,比如说想监视任意“非正常死亡”进程的话,建一个资源管理器管理/proc/dumper,这样系统中任何进程非正常死亡,你的资源管理器都可以收到那个进程号。这个实际上就是 dumper 管理器的工作原理。

谢谢xtang,
用waitpid是不是也可以呢,它会受到死亡进程的状态,再判断状态就可以看出进程是正常死亡还是非正常死亡,这样做行不?

对,waitpid()也可以。只是调用waitpid()会被block住,你的进程除了等,就没有什么别的事可以做了。

那么waitpid必须在主进程中调用么,我想专门启动一个监视进程,其中调用这个函数去等待,但是我试了一下,好象不行,返回值一直是-1,根本没有等待,不知为啥

wait*()都只能wait自已的子进程。你可以主进程启动监视进程,然后监视进程启动所有被监视进程。

waitpid弄好了资,还想请教xtang一个问题
源管理器,怎么工作呢,程序里面应该怎么用啊?

在你的Help里面,System Architecture 下面,专门有一章是讲资源管理器的。这里有6.21的online的文档。

不过,如果你对QNX4比较熟的话,资源管理器是一个程序库,它的作用就是一般QNX4上的服务器程序里的那个大循环。你向资源管理器提供不同的“调用函数”,当用户端有请求时,资源管理器会分析请求,然后调用相对应的你的函数。