如何在Linux系统中结束进程或是中止程序

系统 Linux
进程出错的时候,您可能会想要中止或是杀掉这个进程。在本文中,我们将探索在命令行和图形界面中终止进程或是应用程序,这里我们使用 gedit 作为样例程序。

[[231660]]

在 Linux 中有几种使用命令行或图形界面终止一个程序的方式。

进程出错的时候,您可能会想要中止或是杀掉这个进程。在本文中,我们将探索在命令行和图形界面中终止进程或是应用程序,这里我们使用 gedit 作为样例程序。 

使用命令行或字符终端界面 

Ctrl + C

在命令行中调用 gedit (如果您没有使用 gedit & 命令)程序的一个问题是 shell 会话被阻塞,没法释放命令行提示符。在这种情况下,Ctrl + CCtrlC 的组合键) 会很管用。这会终止 gedit ,并且所有的工作都将丢失(除非文件已经被保存)。Ctrl + C 会给 gedit 发送了 SIGINT 信号。这是一个默认终止进程的停止信号,它将指示 shell 停止 gedit 的运行,并返回到主函数的循环中,您将返回到提示符。

  1. $ gedit
  2. ^C 

Ctrl + Z

它被称为挂起字符。它会发送 SIGTSTP 信号给进程。它也是一个停止信号,但是默认行为不是杀死进程,而是挂起进程。

下面的命令将会停止(杀死/中断) gedit 的运行,并返回到 shell 提示符。

  1. $ gedit
  2. ^Z
  3. [1]+  Stopped                 gedit
  4. $

一旦进程被挂起(以 gedit 为例),将不能在 gedit 中写入或做任何事情。而在后台,该进程变成了一个作业,可以使用 jsbs 命令验证。

  1. $ jobs
  2. [1]+  Stopped                 gedit

jobs 允许您在单个 shell 会话中控制多个进程。您可以终止,恢复作业,或是根据需要将作业移动到前台或是后台。

让我们在后台恢复 gedit,释放提示符以运行其它命令。您可以通过 bg 命令来做到,后跟作业 ID(注意上面的 jobs 命令显示出来的 [1],这就是作业 ID)。

  1. $ bg 1
  2. [1]+ gedit &

这和直接使用 gedit & 启动程序效果差不多:

  1. $ gedit & 

使用 kill

kill 命令提供信号的精确控制,允许您通过指定信号名或是信号数字为进程发送信号,后跟进程 ID 或是 PID。

我喜欢 kill 命令的一点是它也能够根据作业 ID 控制进程。让我们使用 gedit & 命令在后台开启 gedit 服务。假设通过 jobs 命令我得到了一个 gedit 的作业 ID,让我们为 gedit 发送 SIGINT 信号:

  1. $ kill -s SIGINT %1

作业 ID 需要使用 % 前缀,不然 kill 会将其视作 PID。

不明确指定信号,kill 仍然可以工作。此时,默认会发送能中断进程的 SIGTERM 信号。执行 kill -l 可以查看信号名列表,使用 man kill 命令阅读手册。 

使用 killall

如果您不想使用特定的工作 ID 或者 PID,killall 允许您使用特定的进程名。中断 gedit 最简单的 killall 使用方式是:

  1. $ killall gedit

它将终止所有名为 gedit 的进程。和 kill 相似,默认发送的信号是 SIGTERM。使用 -I 选项忽略进程名的大小写。

  1. $ gedit &
  2. [1] 14852
  3.  
  4. $ killall -I GEDIT
  5. [1]+  Terminated              gedit

查看手册学习更多 killall 命令选项(如 -u)。 

使用 xkill

您是否遇见过播放器崩溃,比如 VLC 灰屏或挂起?现在你可以像上面一样获得进程的 PID 来杀掉它,或者使用 xkill 命令终止应用程序。

Using xkill

Using xkill

xkill 允许您使用鼠标关闭窗口。仅需在终端执行 xkill 命令,它将会改变鼠标光标为一个 X 或是一个小骷髅图标。在你想关闭的进程窗口上点击 x。小心使用 xkill,如手册描述的一致,它很危险。我已经提醒过您了!

参阅手册,了解上述命令更多信息。您还可以接续探索 pkillpgrep 命令。 

责任编辑:庞桂玉 来源: Linux中国
相关推荐

2023-01-30 14:27:14

Linux进程

2019-12-23 09:42:19

Linux输入emoji

2019-12-16 10:43:38

Linux内存消耗进程

2019-11-06 15:58:54

Linux内存消耗进程

2019-12-16 09:10:38

Linux中央处理器进程

2019-12-16 11:00:04

LinuxCPU进程

2018-05-31 11:58:06

Linux进程Early OOM

2022-12-19 10:04:54

LinuxUEFI

2018-10-08 08:20:25

Linux进程端口号

2011-01-26 13:26:32

Linux进程

2017-07-21 13:25:33

LinuxMD5哈希恢复文件

2021-09-14 12:34:33

LinuxLinux终端

2020-08-28 07:00:00

WSLLinuxWindows 10

2010-01-28 10:06:05

Linux系统调用

2022-10-14 13:33:35

2023-03-05 16:40:07

linux进程内存

2023-11-26 18:31:41

Linux信号

2023-09-17 17:35:36

LinuxVeritas文件系统

2017-01-05 14:42:49

LinuxUnix服务器

2021-04-30 13:19:20

Linux删除分区
点赞
收藏

51CTO技术栈公众号