如何在 Linux 命令行中终止进程?

芝士年糕
• 阅读 450

如果你想在linux上停止某个进程,你会怎么操作?

如果命令/进程在前台运行,您可以使用 Ctrl+C 终端快捷方式,但是,如果进程不可见(在后台运行),您可以使用专用命令“杀死它”。

“终止进程”是指在执行过程中停止进程,如果您知道进程 ID (PID),则可以使用 kill 命令,如下所示:

kill

在上面的语法中,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 发送终止信号是可选的,如果未提供任何信号,则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] 与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 1 命令中可用的一些有用选项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的是因为我正在处理不属于我的用户的进程。

我使用的环境是租的3A服务器,有需要的可以私

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
2年前
java的linux执行的shell
!/bin/sh 该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用, 也可以作为启动java程序的独立脚本来使用。   警告!!!:该脚本stop部分使用系统kill命令来强制终止指定的java程序进程。 在杀死进程前,未
九路 九路
3年前
Android 内存管理机制
前言:Android系统是基于Linux内核开发的操作系统,而Linux系统有其独到的内存管理机制,会在进程活动停止后结束该进程。Android在此基础上优化了内存管理,会把进程都保存在内存中,直到系统需要更多内存为止,释放部分进程。这些被保存在内存中的进程,并不会影响系统的运行速度,相反,在重新打开这些进程时,会提升进程启动速度Android内存管
Easter79 Easter79
2年前
think
Supervisor的安装与使用入门在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。由于在linux中,每个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端,当控制终端被关闭的时候,相
Wesley13 Wesley13
2年前
MongoDB后台运行
文章目录命令方式(推荐)命令行和配置文件方式命令行:配置文件:命令方式(推荐)如果想在后台运行,启动时只需添加fork函数即可。fork:以守护进程的方式运行MongoDB。指定日志输出路径,而不是输出到命令行bin/mongodbfork
Stella981 Stella981
2年前
Linux后台运行进程 node screen
1\.后台运行的例子nohupcommand/dev/null2&1&解释:nohup:nohangup,不挂断地运行命令。只用nohup命令,关闭终端,进程还存在。若在终端中直接使用Ctrlc,则会关闭进程。command:command是用户输入的命
胖大海 胖大海
1年前
linux 僵尸进程处理
僵尸进程:就是已经结束了的进程,但是没有从进程表中删除,如果过多僵尸进程导致其他重要任务没有PID可用,进而导致系统崩溃。这是真实可能发生的,它有一定的概率,特别当存在一个编码糟糕的程序开始大量产生僵尸进程的时候,在这种情况下,找到并杀死僵尸进程是一个明智的做法。如何找到僵尸进程top命令用ps命令和grep命令寻找僵尸进程:psAostat,
Nginx工作原理
Nginx的进程模型Nginx服务器由一个Master进程和多个Worker进程组成:Master进程:管理Worker进程。对外接口:接收外部的操作(信号);对内转发:根据外部操作的不同,通过信号管理Worker;监听:监控Worker进程的运行状态,Worker进程异常终止后,自动重启Worker进程。Worker进程:所有Worker进程都是平等的,用于处理网络请求。进程数量:在nginx.conf中配置,一般设置为核心数,充分利用CPU资源,同时,避免进程数量过多,避免进程竞争CPU资源,增加上下文切换的损耗。
稚然 稚然
3个月前
探索Android底层开发
//下仔のke:https://yeziit.cn/15444/在Unix和Linux系统中,init是系统启动后由内核首先启动的用户级进程,其进程ID(PID)始终为1。init进程负责启动和管理系统服务、配置系统环境以及处理系统或服务的终止等任务。在现
九路 九路
2个月前
linux nohup命令使用教程
nohup的作用可以将程序以忽略挂起信号(SIGHUP)的方式运行。常见的用法是和&命令一同使用,将命令放置到后台运行,即使终端挂掉,进程会忽略挂起信号,继续运行。平时我们直接执行命令,只是在终端中运行,如果关闭了终端,我们的命令也就结束了。尤其是服务,需