是否有可移植的方法来检查具有特定PID的进程是否仍在运行?

时间:2017-12-14 01:18:49

标签: c++ process

我希望能有这样简单的事情:

bool SomePortableLib::IsProcessWithPIDAlive(uint32_t PID);

实现这样的事情是唯一的方法吗?

 // Warning! untested.
 bool IsProcessWithPIDAlive(uint32_t PID) {
     #if defined(WIN32)
          // Credit: [1]
          HANDLE process = OpenProcess(SYNCHRONIZE, FALSE, pid);
          DWORD ret = WaitForSingleObject(process, 0);
          CloseHandle(process);
          return ret == WAIT_TIMEOUT;
     #elif defined(LINUX) || defined(QNX)
          // Credit: [2]
          struct stat sts;
          if (stat("/proc/<pid>", &sts) == -1 && errno == ENOENT) {
              return false;
          }
          return true;
     #elif ...

[1] https://stackoverflow.com/a/1591371/1294207 [2] https://stackoverflow.com/a/9153189/1294207

或者是否有可移植的lib来执行此操作?如果不是为什么不呢?

我注意到boost有一个(非官方)流程lib boost::process,但它目前也不支持这个。

注意:我对此c++03的实施感兴趣,但欢迎使用c++11-17的答案。

0 个答案:

没有答案