mirror of https://github.com/postgres/postgres
parent
d157b7bbc7
commit
6f21f4adaa
@ -0,0 +1,59 @@ |
||||
/*-------------------------------------------------------------------------
|
||||
* |
||||
* kill.c |
||||
* kill() |
||||
* |
||||
* Copyright (c) 1996-2003, PostgreSQL Global Development Group |
||||
* |
||||
* This is a replacement version of kill for Win32 which sends |
||||
* signals that the backend can recognize. |
||||
* |
||||
* IDENTIFICATION |
||||
* $PostgreSQL: pgsql/src/port/kill.c,v 1.1 2004/05/27 13:08:57 momjian Exp $ |
||||
* |
||||
*------------------------------------------------------------------------- |
||||
*/ |
||||
|
||||
#include "postgres.h" |
||||
|
||||
#ifdef WIN32 |
||||
/* signal sending */ |
||||
int |
||||
pgkill(int pid, int sig) |
||||
{ |
||||
char pipename[128]; |
||||
BYTE sigData = sig; |
||||
BYTE sigRet = 0; |
||||
DWORD bytes; |
||||
|
||||
if (sig >= PG_SIGNAL_COUNT || sig <= 0) |
||||
{ |
||||
errno = EINVAL; |
||||
return -1; |
||||
} |
||||
if (pid <= 0) |
||||
{ |
||||
/* No support for process groups */ |
||||
errno = EINVAL; |
||||
return -1; |
||||
} |
||||
wsprintf(pipename, "\\\\.\\pipe\\pgsignal_%i", pid); |
||||
if (!CallNamedPipe(pipename, &sigData, 1, &sigRet, 1, &bytes, 1000)) |
||||
{ |
||||
if (GetLastError() == ERROR_FILE_NOT_FOUND) |
||||
errno = ESRCH; |
||||
else if (GetLastError() == ERROR_ACCESS_DENIED) |
||||
errno = EPERM; |
||||
else |
||||
errno = EINVAL; |
||||
return -1; |
||||
} |
||||
if (bytes != 1 || sigRet != sig) |
||||
{ |
||||
errno = ESRCH; |
||||
return -1; |
||||
} |
||||
|
||||
return 0; |
||||
} |
||||
#endif |
Loading…
Reference in new issue