杀死一个进程最终挂起
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);
//...
我用 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);
//...