2009-08-24 65 views
2

我正在写一个C++应用程序,将通过升压::进程间与其他进程进行通信,但是我需要检查,如果其他过程实际上是先运行 - 与其他过程负责创建共享内存进程间。如何检查其他进程是否正在运行?如何检查进程是否从C++代码运行?

人,我特别需要检查其他进程

回答

2

的managed_shared_memory构造函数将抛出的情况下,它无法打开指定的共享内存(假设你open_only传递给构造函数)的interprocess_exception。您可以在异常中使用错误代码来测试共享内存是否可用。

所有意味着检查进程是否正在运行(通过查看进程树,测试魔法日志文件或其他),如果远程进程正在运行,但它尚未管理设置共享内存。

更新:如果你只检查进程是否正在由操作系统执行,那么你需要走的进程列表,并考虑各一个。 Here你可以找到一个例子如何做到这一点。

一个更容易的,更便携,但不太精确的方法是使用锁文件。进程A在启动时在某个位置创建一个魔术'锁文件',并在其终止时将其删除。过程B然后可以测试该文件的存在以确定过程A是否正在运行。一个空字节大小的文件就足够了这一点,但该文件还可以包含这有助于处理B(如方法A的PID)的附加信息。但是,在流程A的最开始处有一个很短的时间窗口,在该窗口中不存在锁定文件 - 但该流程正在运行。

+0

如果使用锁定文件要小心,如果进程A崩溃并离开它的锁定文件游逛。 – 2009-08-24 16:45:19

1

您可以使用互斥或​​尝试打开共享内存文件和处理异常。

+0

是的,但我特别需要检查正在运行的进程 – Maciek 2009-08-24 13:27:51

+0

@M。 Utku:如果您控制这两个应用程序,则互斥测试可以正常进行,因为互斥锁通常会在打开应用程序的应用程序关闭时释放。也就是说,我更喜欢Frerich的解决方案,假设* normal *情况是两个应用程序都在运行。 – Brian 2009-08-24 13:44:36

相关问题