【发布时间】:2011-07-14 10:58:28
【问题描述】:
是否有与 Windows 上的函数 kill() 等效的功能?
int kill(pid_t pid, int sig);
如果没有,是否可以根据其 PID 测试进程是否正在运行?
谢谢
【问题讨论】:
标签: c++ windows kill signals pid
是否有与 Windows 上的函数 kill() 等效的功能?
int kill(pid_t pid, int sig);
如果没有,是否可以根据其 PID 测试进程是否正在运行?
谢谢
【问题讨论】:
标签: c++ windows kill signals pid
Windows 没有 unix 意义上的信号。
您可以使用OpenProcess 来检查一个进程是否存在 - 如果它成功,或者失败并出现访问错误,则该进程存在。
bool processExists(DWORD ProcessID) {
HANDLE hProcess = OpenProcess(SYNCHRONIZE, FALSE, ProcessID);
if (hProcess != NULL) {
CloseHandle(hProcess);
return true;
}
// If the error code is access denied, the process exists but we don't have access to open a handle to it.
return GetLastError() == ERROR_ACCESS_DENIED;
}
【讨论】:
Windows 中没有信号。如果打算真正杀死,则使用 TerminateProcess()。您需要进程的句柄,从 OpenProcess() 中获取。您需要申请 PROCESS_TERMINATE 访问权限。 CloseHandle() 关闭句柄。
【讨论】: