我正在写一个C++应用程序,将通过升压::进程间与其他进程进行通信,但是我需要检查,如果其他过程实际上是先运行 - 与其他过程负责创建共享内存进程间。如何检查其他进程是否正在运行?如何检查进程是否从C++代码运行?
人,我特别需要检查其他进程
我正在写一个C++应用程序,将通过升压::进程间与其他进程进行通信,但是我需要检查,如果其他过程实际上是先运行 - 与其他过程负责创建共享内存进程间。如何检查其他进程是否正在运行?如何检查进程是否从C++代码运行?
人,我特别需要检查其他进程
的managed_shared_memory构造函数将抛出的情况下,它无法打开指定的共享内存(假设你open_only传递给构造函数)的interprocess_exception。您可以在异常中使用错误代码来测试共享内存是否可用。
所有意味着检查进程是否正在运行(通过查看进程树,测试魔法日志文件或其他),如果远程进程正在运行,但它尚未管理设置共享内存。
更新:如果你只想检查进程是否正在由操作系统执行,那么你需要走的进程列表,并考虑各一个。 Here你可以找到一个例子如何做到这一点。
一个更容易的,更便携,但不太精确的方法是使用锁文件。进程A在启动时在某个位置创建一个魔术'锁文件',并在其终止时将其删除。过程B然后可以测试该文件的存在以确定过程A是否正在运行。一个空字节大小的文件就足够了这一点,但该文件还可以包含这有助于处理B(如方法A的PID)的附加信息。但是,在流程A的最开始处有一个很短的时间窗口,在该窗口中不存在锁定文件 - 但该流程正在运行。
如果使用锁定文件要小心,如果进程A崩溃并离开它的锁定文件游逛。 – 2009-08-24 16:45:19