summaryrefslogtreecommitdiff
path: root/win32
diff options
context:
space:
mode:
authorusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-05-12 06:47:24 +0000
committerusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-05-12 06:47:24 +0000
commit0f55389d96f50ec2d4a6145bde8565dfbe28f49f (patch)
treec1b772cb4a90c762e4d5c39856b715cb6106cb93 /win32
parentfd379cd7f0e74b21ee7bd30572ddb0fb90c36a3c (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.c36
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