我正在编写一个C ++应用程序,它将通过boost :: interprocess与另一个进程通信,但我需要检查其他进程是否实际上是先运行 - 因为另一个进程负责创建进程间共享内存。如何检查其他进程是否正在运行?
伙计们,我特别需要检查其他流程
答案 0 :(得分:2)
managed_shared_memory ctor将抛出一个interprocess_exception,以防它无法打开给定的共享内存(假设你将open_only传递给ctor)。您可以使用异常中的错误代码来测试共享内存是否可用。
检查进程是否正在运行的所有方法(通过查看进程树,测试魔术日志文件或其他任何方法)都会遇到因远程进程正在运行而发生的竞争条件,但它尚未设置为设置共享内存。
更新:如果仅想要检查操作系统是否正在执行某个进程,那么您需要遍历进程列表并考虑每个进程。 Here你可以找到一个如何做到这一点的例子。
更简单,更便携,但不太精确的技术是使用锁文件。进程A在启动时在某个位置创建一个神奇的“锁定文件”,并在终止时删除它。然后,进程B可以测试该文件是否存在,以确定进程A是否正在运行。一个空字节大小的文件就足够了,但是该文件还可以包含对进程B有帮助的附加信息(例如进程A的PID)。但是,在进程A的最开始处有一个短时间窗口,在该窗口中没有锁定文件 - 但进程正在运行。
答案 1 :(得分:1)
您可以使用互斥锁或尝试打开共享内存文件并处理异常。