杀死一个进程最终挂起

Killing a process ends up hanging

我用 C 编写了这个小程序来终止给定用户输入 pid 的进程。 但是,当我尝试 运行 时,它似乎无限期地挂断了 kill 呼叫。

我不太确定我哪里出错了,或者我的测试是否只是有缺陷,但我很乐意并感谢一些建议!

int main(void){
 int killpid;
 pid_t pid;

 printf("Input PID of process you would like to kill: \n");
 scanf("%d\n", &pid);

 killpid = kill(pid, SIGKILL);

 if(killpid == -1){
  printf("Termination failed!\n");
  return 0;
 }

 printf("Terminated process [%d]!", pid);
 return 0;
}

为了测试,我使用 ps -e 命令列出了我计算机上的所有进程和 运行 我的终止程序以及当前 运行 的文本编辑器的 pid .这是一种糟糕的测试方式,还是我的程序挂起的原因?提前致谢!

删除 \n 即可解决问题。 在使用 SIGKILL:

做像 kill 这样危险的事情之前,我还会检查 scanf 的 return 值
//...
if(scanf("%d", &pid)<=0)
  return 1;
printf("Killing %d \n", pid);
//...