我正在尝试终止以下进程:
pi@raspberrypi ~ $ ps aux | grep raspi
pi 4647 0.0 0.5 3520 1392 pts/2 S+ 12:05 0:00 grep --color=auto raspi
root 8148 0.0 0.5 10744 1372 ? Sl 06:25 0:00 raspivid -w 800 -h 600 -t 15000 -o /home/pi/media/2015-02-01-06-25-03.177474.h264 -n -rot 270
pi 30099 0.0 0.6 11400 1748 pts/1 Sl+ 11:57 0:00 raspistill -o test.jpg
Run Code Online (Sandbox Code Playgroud)
我尝试了如下所示的一些命令,但没有成功:
pi@raspberrypi ~ $ sudo pkill -f raspivid
pi@raspberrypi ~ $ sudo pkill -f raspistill
pi@raspberrypi ~ $ sudo kill 8148
pi@raspberrypi ~ $ sudo kill 30099
Run Code Online (Sandbox Code Playgroud)
我通过 SSH 以“pi”用户身份登录,这是问题的根源吗?如果是,那么为什么我不能杀死自己的进程(30099)?
我在这里错过了什么吗?
kill命令系列的名称具有误导性 - 它们并没有真正杀死任何东西,只是向进程发送信号。默认情况下SIGTERM发送信号,它只是温和地要求进程退出,但进程可以选择忽略它或以不同的方式处理它。(参见手册页kill)。
要强制退出进程,您必须向它发送一个SIGKILL信号。SIGKILL不能被进程忽略,在大多数情况下会导致它立即终止,没有完成正在进行的任务等。
send 的可能语法很少SIGKILL,所有这些都是完全等效的:
kill -9 <pid>
kill -kill <pid>
kill -s SIGKILL <pid>
Run Code Online (Sandbox Code Playgroud)
即使使用SIGKILL并且需要重新启动,该进程也可能无法终止。