diff options
author | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-05-12 06:47:24 +0000 |
---|---|---|
committer | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-05-12 06:47:24 +0000 |
commit | 0f55389d96f50ec2d4a6145bde8565dfbe28f49f (patch) | |
tree | c1b772cb4a90c762e4d5c39856b715cb6106cb93 /win32 | |
parent | fd379cd7f0e74b21ee7bd30572ddb0fb90c36a3c (diff) |
* win32/win32.c (kill): add support of signal 9 on mswin32/mingw32.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1393 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'win32')
-rw-r--r-- | win32/win32.c | 36 |
1 files changed, 27 insertions, 9 deletions
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 |