diff --git a/ChangeLog b/ChangeLog index 4539604b8d..4aa83572b9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Sat May 12 15:43:55 2001 Usaku Nakamura + + * win32/win32.c (kill): add support of signal 9 on mswin32/mingw32. + Fri May 11 15:09:52 2001 WATANABE Hirofumi * ruby.h (rb_string_value): add volatile to avoid compiler warning. diff --git a/win32/win32.c b/win32/win32.c index 15a9a2a673..b67a094fe4 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -2559,18 +2559,36 @@ chown(const char *path, int owner, int group) int kill(int pid, int sig) { -#if 1 - if ((unsigned int)pid == GetCurrentProcessId()) - return raise(sig); + if ((unsigned int)pid == GetCurrentProcessId()) + return raise(sig); - if (sig == 2 && pid > 0) - if (GenerateConsoleCtrlEvent(CTRL_C_EVENT, (DWORD)pid)) - return 0; + if (sig == 2 && pid > 0) { + if (!GenerateConsoleCtrlEvent(CTRL_C_EVENT, (DWORD)pid)) { + errno = GetLastError(); + return -1; + } + } + else if (sig == 9 && pid > 0) { + HANDLE hProc; + hProc = OpenProcess(PROCESS_TERMINATE, FALSE, pid); + if (hProc == NULL || hProc == INVALID_HANDLE_VALUE) { + errno = GetLastError(); + return -1; + } + if (!TerminateProcess(hProc, 0)) { + errno = GetLastError(); + CloseHandle(hProc); + return -1; + } + CloseHandle(hProc); + } + else { + errno = EINVAL; return -1; -#else - return 0; -#endif + } + + return 0; } int