【问题标题】:kill a process given its PID根据 PID 杀死一个进程
【发布时间】:2018-08-29 19:27:25
【问题描述】:

我以前从未用 C 编程过,但我需要一个 C 程序来杀死一个给定其 PID 的进程。我知道这个问题被问了很多,但是我遇到了一个我不明白的编译错误。以下是使用我在 Internet 上可以找到的东西构建的代码:

#include<stdio.h>
#include<signal.h>

int main (int argc, char *argv[]){

    if (argc != 2 ) return 1;

    int pid = atoi (argv[1]);
    kill (pid, SIGINT);

    return 0;
}

还有日志:

-------------- Build: Debug in processKiller (compiler: GNU GCC Compiler)---------------

mingw32-gcc.exe -Wall -g  -c "D:\.Ce PC\Desktop\ws processKiller\processKiller\main.c" -o obj\Debug\main.o
D:\.Ce PC\Desktop\ws processKiller\processKiller\main.c: In function 'main':
D:\.Ce PC\Desktop\ws processKiller\processKiller\main.c:8:5: warning: implicit declaration of function 'atoi' [-Wimplicit-function-declaration]
     int pid = atoi (argv[1]);
     ^
D:\.Ce PC\Desktop\ws processKiller\processKiller\main.c:9:5: warning: implicit declaration of function 'kill' [-Wimplicit-function-declaration]
     kill (pid, SIGINT);
     ^
mingw32-g++.exe  -o bin\Debug\processKiller.exe obj\Debug\main.o   
obj\Debug\main.o: In function `main':
D:/.Ce PC/Desktop/ws processKiller/processKiller/main.c:9: undefined reference to `kill'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 0 second(s))
2 error(s), 2 warning(s) (0 minute(s), 0 second(s))

谢谢。

【问题讨论】:

  • 对于 atoi 你需要 stdlib.h

标签: c pid kill


【解决方案1】:

kill 是一个 POSIX 函数。由于您使用的是 Windows,因此您需要了解如何使用 WINAPI 终止进程。这有点复杂,但这应该可以帮助您入门:How to effectively kill a process in C++ (Win32)?

【讨论】:

  • 我认为 MinGW 将使大部分或全部 POSIX 可用,我猜 kill() 将在我的 MinGW 内部翻译。
  • 我没有提到它,但我需要用 SIGINT 来“温和地”杀死进程。
  • @IharobAlAsimi 我没有考虑到这一点,你可能是对的。