mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
gh-58689: Fix os.kill() error handling on Windows (#128932)
This commit is contained in:
parent
7807b40730
commit
939df0f9f6
1 changed files with 10 additions and 19 deletions
|
@ -9582,42 +9582,33 @@ os_kill_impl(PyObject *module, pid_t pid, Py_ssize_t signal)
|
|||
|
||||
Py_RETURN_NONE;
|
||||
#else /* !MS_WINDOWS */
|
||||
PyObject *result;
|
||||
DWORD sig = (DWORD)signal;
|
||||
DWORD err;
|
||||
HANDLE handle;
|
||||
|
||||
#ifdef HAVE_WINDOWS_CONSOLE_IO
|
||||
/* Console processes which share a common console can be sent CTRL+C or
|
||||
CTRL+BREAK events, provided they handle said events. */
|
||||
if (sig == CTRL_C_EVENT || sig == CTRL_BREAK_EVENT) {
|
||||
if (GenerateConsoleCtrlEvent(sig, (DWORD)pid) == 0) {
|
||||
err = GetLastError();
|
||||
PyErr_SetFromWindowsErr(err);
|
||||
}
|
||||
else {
|
||||
Py_RETURN_NONE;
|
||||
return PyErr_SetFromWindowsErr(0);
|
||||
}
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
#endif /* HAVE_WINDOWS_CONSOLE_IO */
|
||||
|
||||
/* If the signal is outside of what GenerateConsoleCtrlEvent can use,
|
||||
attempt to open and terminate the process. */
|
||||
handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, (DWORD)pid);
|
||||
HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, (DWORD)pid);
|
||||
if (handle == NULL) {
|
||||
err = GetLastError();
|
||||
return PyErr_SetFromWindowsErr(err);
|
||||
}
|
||||
|
||||
if (TerminateProcess(handle, sig) == 0) {
|
||||
err = GetLastError();
|
||||
result = PyErr_SetFromWindowsErr(err);
|
||||
} else {
|
||||
result = Py_NewRef(Py_None);
|
||||
return PyErr_SetFromWindowsErr(0);
|
||||
}
|
||||
|
||||
BOOL res = TerminateProcess(handle, sig);
|
||||
CloseHandle(handle);
|
||||
return result;
|
||||
if (res == 0) {
|
||||
return PyErr_SetFromWindowsErr(0);
|
||||
}
|
||||
|
||||
Py_RETURN_NONE;
|
||||
#endif /* !MS_WINDOWS */
|
||||
}
|
||||
#endif /* HAVE_KILL */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue