当进程行为异常时,您有时可能想要终止或杀死它。在这篇文章中,我们将探讨几种从命令行以及图形界面终止进程或应用程序的方法,我们将使用 gedit 作为示例应用程序。
使用命令行/终止字符
Ctrl + C
从命令行调用 gedit
的一个问题(如果您不使用 gedit &
)是它不会释放提示符,因此该 shell 会话被阻塞。在这种情况下,Ctrl+C(Control 键与 'C' 组合)会派上用场。这将终止 gedit
,并且所有工作都将丢失(除非文件已保存)。Ctrl+C 向 gedit
发送 SIGINT
信号。这是一个停止信号,其默认操作是终止进程。它指示 shell 停止 gedit
并返回到主循环,您将重新获得提示符。
$ gedit
^C
Ctrl + Z
这被称为挂起字符。它向进程发送 SIGTSTP
信号。这也是一个停止信号,但默认操作不是杀死而是挂起进程。
它将停止(杀死/终止)gedit
并返回 shell 提示符。
$ gedit
^Z
[1]+ Stopped gedit
$
一旦进程被挂起(在本例中为 gedit
),就无法在 gedit
中写入或执行任何操作。在后台,进程变为作业。这可以通过 jobs
命令来验证。
$ jobs
[1]+ Stopped gedit
jobs
允许您在单个 shell 会话中控制多个进程。您可以根据需要停止、恢复以及将作业移动到后台或前台。
让我们在后台恢复 gedit
并释放提示符以运行其他命令。您可以使用 bg
命令执行此操作,后跟作业 ID(注意上面 jobs
输出中的 [1]
。[1]
是作业 ID)。
$ bg 1
[1]+ gedit &
这类似于使用 &,
启动 gedit
$ gedit &
使用 kill
kill
允许对信号进行精细控制,使您能够通过指定信号名称或信号编号,后跟进程 ID 或 PID 来向进程发送信号。
我喜欢 kill
的一点是它也可以与作业 ID 一起使用。让我们使用 gedit &
在后台启动 gedit
。假设我从 jobs
命令中获得了 gedit
的作业 ID,让我们向 gedit
发送 SIGINT
$ kill -s SIGINT %1
请注意,作业 ID 应以 %
为前缀,否则 kill
会将其视为 PID。
kill
可以不用显式指定信号就可以工作。在这种情况下,默认操作是发送 SIGTERM
,这将终止进程。执行 kill -l
以列出所有信号名称,并使用 man kill
命令阅读手册页。
使用 killall
如果您不想指定作业 ID 或 PID,killall
允许您按名称指定进程。使用 killall
终止 gedit
的最简单方法是
$ killall gedit
这将杀死所有名称为 gedit
的进程。与 kill
一样,默认信号是 SIGTERM
。它具有使用 -I
忽略大小写的选项
$ gedit &
[1] 14852
$ killall -I GEDIT
[1]+ Terminated gedit
要了解有关 killall
提供的各种标志(例如 -u
,它允许您杀死用户拥有的进程)的更多信息,请查看手册页 (man killall
)
使用 xkill
您是否遇到过媒体播放器(如 VLC)灰屏或卡死的问题?现在,您可以使用上面列出的命令之一找到 PID 并杀死应用程序,或者使用 xkill
。
xkill
允许您使用鼠标杀死窗口。只需在终端中执行 xkill
,它应该将鼠标光标更改为 x 或一个小的骷髅图标。单击您要关闭的窗口上的 x。但是,请小心使用 xkill
,正如其手册页所解释的那样,它可能很危险。已警告您!
有关更多信息,请参阅每个命令的手册页。您还可以探索诸如 pkill
和 pgrep
之类的命令。
5 条评论