MinGWでkill()ライクな関数を作る
MinGWのsignal関連ライブラリにはkill()が含まれない。
簡易的にprocessをkillする関数を作ってみる。
Windows APIを使う
SIGNALに何が指定されても強制的にprocessをkillするだけなら以下の実装で可能。
int killpid(int pid, int sig) { HANDLE hProcess; int res = 0; /* Whatever comes, we always kill the process */ switch (sig) { case SIGINT: /* Interactive attention */ case SIGILL: /* Illegal instruction */ case SIGFPE: /* Floating point error */ case SIGSEGV: /* Segmentation violation */ case SIGTERM: /* Termination request */ case SIGBREAK: /* Control-break */ case SIGABRT: /* Abnormal termination (abort) */ hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, pid); if (hProcess == NULL) { return -1; } if (!TerminateProcess(hProcess, (unsigned int)-1)) { res = -1; } break; default: return -1; break; } CloseHandle(hProcess); return res; }
コンパイルしてみる
実行してみる
tasklistコマンド(Unixのpsに相当)で終了したいプログラムの
PID(Process ID)を探す。
PID = 3192の場合、以下のように実行すれば終了できる。
killpid 3192