2014-09-05 56 views
0

我有两个进程。 1)服务器和2)客户端。客户端运行的要求是服务器进程必须正在运行。我可以这样做检查我的监控pidin命令的输出。问题在于服务器进程在客户端运行时死机。我(客户端进程)希望能够在服务器进程死亡并重新启动服务器进程时得到通知。如果进程在QNX中死亡,会收到通知

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

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

回答

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流程花费的开销少得多。

让我知道你是否对上述有任何疑问。

+0

谢谢@maverick。你会抛出一些关于妖魔化应用程序的灯光吗?我的环境是Blackberry Z10,它基于QNX并使用QCoreApplication创建长时间运行的后台进程。 – 2014-09-08 12:00:54