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



我有一个 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 的情况下执行此操作。

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

您可以先发送信号 0:

杀(2(:

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

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

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

最新更新