如何使用示例杀死Linux中的进程

时间:2020-02-23 14:30:56  来源:igfitidea点击:

介绍

当Linux系统中的某个进程开始出现异常行为时,瞬间就来了,而作为管理员,我们需要为了整个系统的健康而停止该进程。以下实用程序将找到并停止该过程。

众所周知,在继续之前,每个Linux进程都有一个进程标识(PID),我们将必须寻找感兴趣的特定PID。为此,我们可以使用以下工具

使用ps命令

此命令报告当前进程的快照。

要列出所有进程,只需运行

$ps -A

要过滤输出,我们可以使用管道来达到所需的确切过程,例如

$ps aux | grep apa

这将列出所有进程名称中带有上述字母的进程。从那里,我们可以缩小范围并获取罪魁祸首的准确PID。

作为命令库的替代品,我们还可以使用pidof或者pgrep,如下所示

$pidof zsh

那将返回zsh进程的PID

$pgrep zsh

这还将返回zsh进程的PID。

发现PID之后,下一步就是停止该过程。例如,这里有各种工具:kill,killall,pkill,top和其他工具。

我们必须意识到,只要我们具有停止进程本身的正确权限,这些命令就可以工作。如果我们没有杀死其他用户进程的足够权限,则它们将无法工作。但是,我们将能够杀死自己的进程。

可以猜到的超级用户是超级用户,它可以杀死属于系统中任何其他用户的任何进程。

在Linux上使用kill命令杀死进程

kill向进程发送信号。信号可以是:SIGHUP,可以用1表示并导致进程挂起SIGKILL,可以用9表示并导致进程被非正常杀死SIGTERM可以用15表示并导致进程被正常杀死

如果执行不带选项的kill命令,则默认情况下使用SIGTERM。

杀掉进程

使用PID 7089终止进程,而不保存任何打开的文件

$kill -9 7089 
$kill -SIGKILL 7089

确保已保存所有文件后,使用PID 7080终止进程。这很好地终止了该过程:

$kill -15 7080
$kill -SIGTERM 7080

我们可以利用的另一个命令是killall命令。如果我们知道进程的名称,则无需查找其PID。 killall按名称将其杀死,如下所示。

有关更多选项,请运行:

$man kill

使用killall命令在Linux上终止进程

killall命令按上面指定的名称杀死进程。做就是了:

$killall httpd

要了解更多信息,请查看手册页:

$man killall

使用pkill命令在Linux上终止进程

根据名称和其他属性发出信号

pkill的工作方式与killall类似。它的语法很简单:

$pkill [options] pattern

pkill根据名称和其他属性向进程发送信号。

如果我们知道要传递命令的进程的名称以及如下所示的进程的名称,则使用pkill非常简单。默认情况下,它使用SIGTERM信号,但可以根据需要更改。

$pkill nginx

所有命令选项:

$pkill --help       

Usage:
 pkill [options] <pattern>

Options:
 -<sig>, --signal <sig>    signal to send (either number or name)
 -e, --echo                display what is killed
 -c, --count               count of matching processes
 -f, --full                use full process name to match
 -g, --pgroup <PGID,...>   match listed process group IDs
 -G, --group <GID,...>     match real group IDs
 -i, --ignore-case         match case insensitively
 -n, --newest              select most recently started
 -o, --oldest              select least recently started
 -P, --parent <PPID,...>   match only child processes of the given parent
 -s, --session <SID,...>   match session IDs
 -t, --terminal <tty,...>  match by controlling terminal
 -u, --euid <ID,...>       match by effective IDs
 -U, --uid <ID,...>        match by real IDs
 -x, --exact               match exactly with the command name
 -F, --pidfile <file>      read PIDs from file
 -L, --logpidfile          fail if PID file is not locked
 --ns <PID>                match the processes that belong to the same
                           namespace as <pid>
 --nslist <ns,...>         list which namespaces will be considered for
                           the --ns option.
                           Available namespaces: ipc, mnt, net, pid, user, uts
 -h, --help     display this help and exit
 -V, --version  output version information and exit

使用top命令在Linux上终止进程

我们可以使用top命令在进程运行时通过其交互式会话杀死该进程。

要直接从顶部界面取消进程,请按k。它将询问我们要杀死的进程的PID。输入PID,然后按Enter。它用

top - 10:07:55 up 1 day, 22:09,  0 users,  load average: 0.52, 0.58, 0.59
Tasks:   4 total,   1 running,   3 sleeping,   0 stopped,   0 zombie
%Cpu(s):  4.7 us,  3.5 sy,  0.0 ni, 91.0 id,  0.0 wa,  0.7 hi,  0.0 si,  0.0 st
KiB Mem : 16669896 total,  2348244 free, 14092300 used,   229352 buff/cache
KiB Swap: 50331648 total, 49101952 free,  1229696 used.  2443864 avail Mem
PID to signal/kill [default pid = 1] 10000

默认情况下,它使用SIGTERM信号,如下所示。只需再次按Enter键,top即可完成其余工作。

top - 10:07:55 up 1 day, 22:09,  0 users,  load average: 0.52, 0.58, 0.59
Tasks:   4 total,   1 running,   3 sleeping,   0 stopped,   0 zombie
%Cpu(s):  4.7 us,  3.5 sy,  0.0 ni, 91.0 id,  0.0 wa,  0.7 hi,  0.0 si,  0.0 st
KiB Mem : 16669896 total,  2348244 free, 14092300 used,   229352 buff/cache
KiB Swap: 50331648 total, 49101952 free,  1229696 used.  2443864 avail Mem
Send pid 10000 signal [15/sigterm]

要了解更多信息,请查看手册页:

$man top