从我在网上看到的情况来看,您在 c++ 中调用 kill 方法是为了查看进程是否存在。问题是 PID 被 rycled 而你寻找的相同 PID 可能不是同一个过程。我有一个程序有两个进程,它们不是彼此的孩子。与他们沟通的唯一方式是IPC。我希望我的主机进程在客户端进程关闭时关闭。为了做到这一点,我必须知道客户的进程何时不再存在。
在 Windows 中,他们有所谓的进程处理程序,它将保留 PID 不被回收,直到创建句柄的进程关闭。我想知道如何在 macOS/Linux (POSIX) 系统上实现这一点。
作为 PID 的有问题的代码被回收。
if (0 == kill(pid, 0))
{
// Process exists.
}
没错,所以这种
kill
方法行不通。真的,故事到此结束。这不是一个工作工具。两种选择:
waitpid
则完全是为了在它退出时观看waitpid
)。您可以希望您拥有“跟踪”权限并用于ptrace
附加到其他进程并等待exit
调用。解决方案是通过缓存而不是关闭.
process handle
对于系统,我们只需从内核POSIX
获取进程的启动时间,然后检查缓存的启动时间是否等于当前启动时间。如果没有检测到 PID 冲突并返回 false。OS DEPENDANT!
视窗:
苹果系统:
Linux: