我希望能有这样简单的事情:
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
的答案。