如果进程在QNX中死亡,则会收到通知

时间:2014-09-05 15:30:45

标签: qnx

我有两个过程。 1)服务器和2)客户端。客户端运行的必备条件是服务器进程必须正在运行。我可以这样检查我监控pidin命令的输出。问题在于服务器进程在客户端运行时死亡。我(客户端进程)希望能够在服务器进程终止并重新启动服务器进程时收到通知。

这可以通过最简单的方式实现吗? QNX是否为此提供了任何机制?

PS:我不想使用QNX IPC机制(如ConnectAttach)。

1 个答案:

答案 0 :(得分:2)

  1. 如果服务器没有守护自身,那么它的父服务器可以通过SIGCHLD处理程序和waitpid()检测终止。随机示例位于此页面上,其中包括: http://www.microhowto.info/howto/reap_zombie_processes_using_a_sigchld_handler.html 服务器的父级可以提供有关终止的通知。

  2. 如果服务器守护自身,那么任何人都可以通过QNX特定的procmgr_event_notify()API检测到它的终止。以下官方文档页面提供了一个完整的示例程序,演示了API的使用:http://www.qnx.com/developers/docs/6.5.0_sp1/index.jsp?topic=%2Fcom.qnx.doc.neutrino_lib_ref%2Fp%2Fprocmgr_event_notify.html

  3. 不是很好的风格,但如果您使用快速黑客攻击,那么您可以定期查看/ proc下的正在运行的进程列表。 / proc下的每个数字目录条目表示PID =目录名称的进程。上面(2.)中的文档页面演示了如何获取进程的名称(二进制文件的完整路径)。如果您采用这种方法,那么我的建议是找出您正在寻找的进程的pid,并在以后监视该pid,而不是每次都通过完整列表。还要注意,理论上,原始进程可以终止,并且PID在两次连续检查之间重用。如果您当前正在运行pidin并解析其输出,那么我建议您使用此条目中描述的方法,因为这种方法比创建完整的pidin过程要少得多。

  4. 如果您对上述内容有任何疑问,请与我们联系。