【问题标题】:C++ Sending a simple signal in WindowsC++ 在 Windows 中发送一个简单的信号
【发布时间】:2011-07-14 10:58:28
【问题描述】:

是否有与 Windows 上的函数 kill() 等效的功能?

int kill(pid_t pid, int sig);

如果没有,是否可以根据其 PID 测试进程是否正在运行?

谢谢

【问题讨论】:

    标签: c++ windows kill signals pid


    【解决方案1】:

    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;
    }
    

    【讨论】:

      【解决方案2】:

      Windows 中没有信号。如果打算真正杀死,则使用 TerminateProcess()。您需要进程的句柄,从 OpenProcess() 中获取。您需要申请 PROCESS_TERMINATE 访问权限。 CloseHandle() 关闭句柄。

      【讨论】:

      • 一边评论:使用 TerminateProcess 就像使用大锤 - 它完全按照您的想法执行,它终止了进程。该进程没有进行任何清理,它已终止。
      猜你喜欢
      • 2021-12-01
      • 2010-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多