如果命令/进程在前台运行,您可以使用 ctrl+c 终端快捷方式,但是,如果进程不可见(在后台运行),您可以使用专用命令“杀死它”。
“终止进程”是指在执行过程中停止进程,如果您知道进程 id (pid),则可以使用 kill 命令,如下所示:
kill <signal> <pid>
在上面的语法中,signal指的是要发送终止的终止信号,并且pid指的是进程的 id。
还有一个 killall 命令,我将在本文中讨论kill 和 killall 命令。
在你开始杀死进程之前,你应该知道一些事情,例如有哪些终止信号可用,如何找到 pid 等。
让我们先从信号开始。
linux 中的终止信号
当一个进程被操作系统或用户终止时,即进程没有自行完成,它会被发送一个终端信号。
以下是可用的终止信号:
- sighup:
- 1:信号挂断:当控制它的终端关闭时发送到进程。
- sigint:
- 2:信号中断:当用户终止进程时发送给进程的信号。(例如 ctrl + x)
- sigkill:
- 9:signal kill:立即退出进程的信号,不允许它保存当前状态。
- sigterm:
- 15:信号终止:发送到信号以请求终止进程。该信号可以被进程忽略。但这是终止进程的首选方式,因为它可以在进程收到 sigterm 时释放资源。
- sigstop:
- 19(x86、arm)、17(alpha)、23(mips)、24(parisc):信号停止:停止进程但稍后恢复的信号。
一般情况会使用信号 9 和 15
获取进程的pid
您还需要了解要终止的进程的详细信息,使用 kill 命令,您必须提供进程的 id (pid),您可以从进程名称中获取 pid:
pidof exact_process_name
在 linux 命令行中终止进程
让我们先看看 kill 命令,因为您将比 killall 更多地使用它。
使用 kill 命令
该kill命令要求您知道要终止的进程的 id,以及可选的终止信号。
要简单地终止命令,请使用以下语法:
kill [signal] <pid>
向 pid 发送终止信号是可选的,如果未提供任何信号,则kill默认发送 sigterm ( 15),以正常终止所述进程结束。
我启动了sleep 命令的后台进程(它给了我一个 pid),让我们尝试使用kill命令杀死它。
杀死这个特定的实例sleep如下所示:
$ sleep 120 & [1] 125686 $ kill 125686 [1] + terminated sleep 120
如果我想使用终止信号,我可以使用数值或信号本身:
$ sleep 120 & [1] 125746 $ kill -sigkill 125746 [1] + killed sleep 120 ####----##-----#### $ sleep 120 & [1] 125759 $ kill -9 125759 [1] + killed sleep 120
如果 kill 命令没有指定信号,则默认使用 sigterm (15)。
使用 killall 命令
如果不知道某个进程的pid是多少,或者该进程有多个子进程,又想一次性杀死子进程和父进程,可以使用killall命令。
killall [signal] <process-name>
与kill命令类似,指定终止信号是可选的,当没有指定终止信号时,killall将发送 sigterm ( 15) 以优雅地关闭所述进程。
为了演示 的使用killall,我想杀死两个正在运行的 sleep 命令。
$ sleep 120 & [1] 18609 $ sleep 2000 & [2] 18612 $ killall sleep [1]- terminated sleep 120 [2]+ terminated sleep 2000
此外,您可以使用该-e标志来查找进程名称的完全匹配。
使用 pkill 命令
命令的替代命令kill是pkill命令,它是pgrep和kill命令的“组合”。
killall杀死所有具有匹配名称的进程。另一方面,pkill使用模式匹配来匹配进程并杀死它们。
下面是语法:
pkill [options] pattern
命令中可用的一些有用选项pkill如下:
-u
: 特定所有者拥有的进程-x
: 完全匹配模式的进程-signal
: 指定终止信号(默认为 sigterm)
假设我的guest计算机上有一个用户当前不应该运行任何进程,如果有,我想终止它们,我怎样才能做到这一点?
$ ps aux | grep sleep guest 126061 0.0 0.0 6664 428 pts/3 s 10:14 0:00 sleep 50 $ sudo pkill -u guest
请注意,我使用sudo的是因为我正在处理不属于我的用户的进程。
以上就是在linux命令行中终止进程的操作命令的详细内容,更多关于linux命令行中终止进程的资料请关注代码网其它相关文章!
发表评论