(LINX-IPC协议)如何确定具有PID的进程是否在C ++中运行?

时间:2017-05-22 20:37:29

标签: c++ linux ipc

我有一个LINX进程的PID(通过'linxstat'命令获得),我想将LINX信号(http://linx.sourceforge.net/linxdoc/doc/html/linx.7.html)发送到:

Cmn::Ipc<ASig> sig(A_SIG);
sig->a = 10;
sig->b = 20;
sig.send(PID);

现在,在我将LINX信号发送到PID之前,我想确保PID存在并且仍在运行(确保进程没有崩溃)。如果PID不存在,那么我将把它发送到另一个PID为0的公共进程,这个进程可以处理任何类型的信号。有没有办法检查C ++中是否存在PID?如果是,那么它的LINX API是什么?

我希望能够在不必知道流程名称和流程的PID的情况下完成此操作。

3 个答案:

答案 0 :(得分:0)

在获取PID的代码,执行PID检查和发送信号目标进程之间的任何地方都可以退出,并且具有相同PID的新的无关过程可以产生,因为PID数量的范围是有限的并且它们随着时间的推移而被重用。所以我认为用PID来实现你想要的东西是不可能的。

答案 1 :(得分:0)

您可以先发送信号0:

杀灭(2):

  

如果sig为0,则不发送任何信号,但错误检查仍然存在   执行;这可以用来检查是否存在          进程ID或进程组ID。

但它可能毫无意义。此外,这种基于pid的访问更容易出现竞争条件,除非您是流程的父级(在这种情况下,您始终知道它是否已经结束以及您是否已收到它)

答案 2 :(得分:0)

无论您做什么检查它当前是否正在运行,都不能保证它在您检查的时间和发送信号的时间之间不会崩溃 - 或者,在您之间发送信号及其到达的时间。因此,只需发送信号并找到一种方法来处理当进程到达时该进程可能不存在的事实。在极端情况下,该过程甚至可能会死亡,并且在信号到达之前重新使用它的PID - 玩得很开心......