Linux 下杀死进程

2019-03-01 / Linux bash

首先,我们需要了解一个命令 kill -9 23499 ,这就是常见的 kill 命令,其中后面 -9 表示给 23499 这个 PID 的进程发送信号 9 ,表示强制、尽快终止进程。

[root@CentOS ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  1.0  0.3 129096  6480 ?        Ss   22:59   0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root         2  0.0  0.0      0     0 ?        S    22:59   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    22:59   0:00 [ksoftirqd/0]
root         4  0.0  0.0      0     0 ?        S    22:59   0:00 [kworker/0:0]
root         5  0.0  0.0      0     0 ?        S<   22:59   0:00 [kworker/0:0H]
root         6  0.0  0.0      0     0 ?        S    22:59   0:00 [kworker/u64:0]
root         7  0.0  0.0      0     0 ?        S    22:59   0:00 [migration/0]
root         8  0.0  0.0      0     0 ?        S    22:59   0:00 [rcu_bh]
root         9  0.2  0.0      0     0 ?        S    22:59   0:00 [rcu_sched]
root        10  0.0  0.0      0     0 ?        S<   22:59   0:00 [lru-add-drain]
root        11  0.0  0.0      0     0 ?        S    22:59   0:00 [watchdog/0]
root        12  0.0  0.0      0     0 ?        S    22:59   0:00 [watchdog/1]
root        13  0.0  0.0      0     0 ?        S    22:59   0:00 [migration/1]
root        14  0.0  0.0      0     0 ?        S    22:59   0:00 [ksoftirqd/1]
root        15  0.0  0.0      0     0 ?        S    22:59   0:00 [kworker/1:0]
root        16  0.0  0.0      0     0 ?        S<   22:59   0:00 [kworker/1:0H]
root        18  0.0  0.0      0     0 ?        S    22:59   0:00 [kdevtmpfs]
root        19  0.0  0.0      0     0 ?        S<   22:59   0:00 [netns]
root        20  0.0  0.0      0     0 ?        S    22:59   0:00 [khungtaskd]
root        21  0.0  0.0      0     0 ?        S<   22:59   0:00 [writeback]
root        22  0.0  0.0      0     0 ?        S<   22:59   0:00 [kintegrityd]
root        23  0.0  0.0      0     0 ?        S<   22:59   0:00 [bioset]
root        24  0.0  0.0      0     0 ?        S<   22:59   0:00 [bioset]
root        25  0.0  0.0      0     0 ?        S<   22:59   0:00 [bioset]
root        26  0.0  0.0      0     0 ?        S<   22:59   0:00 [kblockd]
root        27  0.0  0.0      0     0 ?        S<   22:59   0:00 [md]
root        28  0.0  0.0      0     0 ?        S<   22:59   0:00 [edac-poller]
root        29  0.0  0.0      0     0 ?        S<   22:59   0:00 [watchdogd]
root        30  0.0  0.0      0     0 ?        S    22:59   0:00 [kworker/0:1]
root        35  0.0  0.0      0     0 ?        S    22:59   0:00 [kswapd0]
root        36  0.0  0.0      0     0 ?        SN   22:59   0:00 [ksmd]
root        37  0.0  0.0      0     0 ?        SN   22:59   0:00 [khugepaged]
root        38  0.0  0.0      0     0 ?        S<   22:59   0:00 [crypto]
root        46  0.0  0.0      0     0 ?        S<   22:59   0:00 [kthrotld]
root        47  0.0  0.0      0     0 ?        S    22:59   0:00 [kworker/u64:1]
root        48  0.0  0.0      0     0 ?        S<   22:59   0:00 [kmpath_rdacd]
root        49  0.0  0.0      0     0 ?        S    22:59   0:00 [kworker/0:2]
root        50  0.0  0.0      0     0 ?        S<   22:59   0:00 [kaluad]
root        51  0.0  0.0      0     0 ?        R    22:59   0:00 [kworker/1:1]
root        52  0.0  0.0      0     0 ?        S<   22:59   0:00 [kpsmoused]
root        53  0.0  0.0      0     0 ?        S    22:59   0:00 [kworker/1:2]
root        54  0.0  0.0      0     0 ?        S<   22:59   0:00 [ipv6_addrconf]
root        67  0.0  0.0      0     0 ?        S<   22:59   0:00 [deferwq]
root        99  0.0  0.0      0     0 ?        S    22:59   0:00 [kauditd]
root       216  0.0  0.0      0     0 ?        S    22:59   0:00 [kworker/1:3]
root      1061  0.0  0.0      0     0 ?        S<   22:59   0:00 [ata_sff]
root      1095  0.0  0.0      0     0 ?        S    22:59   0:00 [scsi_eh_0]
root      1110  0.0  0.0      0     0 ?        S<   22:59   0:00 [scsi_tmf_0]
root      1116  0.0  0.0      0     0 ?        S    22:59   0:00 [scsi_eh_1]
root      1122  0.0  0.0      0     0 ?        S<   22:59   0:00 [scsi_tmf_1]
root      1132  0.0  0.0      0     0 ?        S    22:59   0:00 [kworker/u64:2]
root      1133  0.0  0.0      0     0 ?        S    22:59   0:00 [scsi_eh_2]
root      1139  0.0  0.0      0     0 ?        S<   22:59   0:00 [scsi_tmf_2]
root      1140  0.0  0.0      0     0 ?        S    22:59   0:00 [kworker/u64:3]
root      1145  0.0  0.0      0     0 ?        S    22:59   0:00 [scsi_eh_3]
root      1152  0.0  0.0      0     0 ?        S<   22:59   0:00 [scsi_tmf_3]
root      1159  0.0  0.0      0     0 ?        S    22:59   0:00 [scsi_eh_4]
root      1166  0.0  0.0      0     0 ?        S<   22:59   0:00 [scsi_tmf_4]
root      1171  0.0  0.0      0     0 ?        S    22:59   0:00 [scsi_eh_5]
root      1184  0.0  0.0      0     0 ?        S<   22:59   0:00 [scsi_tmf_5]
root      1189  0.0  0.0      0     0 ?        S    22:59   0:00 [scsi_eh_6]
root      1196  0.0  0.0      0     0 ?        S<   22:59   0:00 [scsi_tmf_6]
root      1204  0.0  0.0      0     0 ?        S    22:59   0:00 [scsi_eh_7]
root      1209  0.0  0.0      0     0 ?        S<   22:59   0:00 [scsi_tmf_7]
root      1215  0.0  0.0      0     0 ?        S    22:59   0:00 [kworker/u64:4]
root      1222  0.0  0.0      0     0 ?        S    22:59   0:00 [kworker/u64:5]
root      1227  0.0  0.0      0     0 ?        S    22:59   0:00 [kworker/u64:6]
root      1232  0.0  0.0      0     0 ?        S    22:59   0:00 [kworker/u64:7]
root      1237  0.0  0.0      0     0 ?        S    22:59   0:00 [kworker/u64:8]
root      1246  0.0  0.0      0     0 ?        S    22:59   0:00 [kworker/u64:9]
root      1664  0.0  0.0      0     0 ?        S<   22:59   0:00 [kworker/0:1H]
root      1671  0.0  0.0      0     0 ?        S<   22:59   0:00 [kworker/1:1H]
root      1711  0.0  0.0      0     0 ?        S<   22:59   0:00 [kdmflush]
root      1714  0.0  0.0      0     0 ?        S<   22:59   0:00 [bioset]
root      1726  0.0  0.0      0     0 ?        S<   22:59   0:00 [kdmflush]
root      1729  0.0  0.0      0     0 ?        S<   22:59   0:00 [bioset]
root      1747  0.0  0.0      0     0 ?        S<   22:59   0:00 [bioset]
root      1749  0.0  0.0      0     0 ?        S<   22:59   0:00 [xfsalloc]
root      1755  0.0  0.0      0     0 ?        S<   22:59   0:00 [xfs_mru_cache]
root      1760  0.0  0.0      0     0 ?        S<   22:59   0:00 [xfs-buf/dm-0]
root      1764  0.0  0.0      0     0 ?        S<   22:59   0:00 [xfs-data/dm-0]
root      1765  0.0  0.0      0     0 ?        S<   22:59   0:00 [xfs-conv/dm-0]
root      1766  0.0  0.0      0     0 ?        S<   22:59   0:00 [xfs-cil/dm-0]
root      1767  0.0  0.0      0     0 ?        S<   22:59   0:00 [xfs-reclaim/dm-]
root      1768  0.0  0.0      0     0 ?        S<   22:59   0:00 [xfs-log/dm-0]
root      1769  0.0  0.0      0     0 ?        S<   22:59   0:00 [xfs-eofblocks/d]
root      1770  0.0  0.0      0     0 ?        S    22:59   0:00 [xfsaild/dm-0]
root      1840  0.2  0.1  38804  2496 ?        Ss   22:59   0:00 /usr/lib/systemd/systemd-journald
root      1862  0.0  0.1 193424  3640 ?        Ss   22:59   0:00 /usr/sbin/lvmetad -f
root      1873  0.0  0.0      0     0 ?        S    22:59   0:00 [kworker/0:3]
root      1874  0.4  0.1  45920  2276 ?        Ss   22:59   0:00 /usr/lib/systemd/systemd-udevd
root      2972  0.0  0.0      0     0 ?        S<   22:59   0:00 [xfs-buf/sda1]
root      2973  0.0  0.0      0     0 ?        S<   22:59   0:00 [xfs-data/sda1]
root      2974  0.0  0.0      0     0 ?        S<   22:59   0:00 [xfs-conv/sda1]
root      2976  0.0  0.0      0     0 ?        S<   22:59   0:00 [xfs-cil/sda1]
root      2977  0.0  0.0      0     0 ?        S<   22:59   0:00 [xfs-reclaim/sda]
root      2978  0.0  0.0      0     0 ?        S<   22:59   0:00 [xfs-log/sda1]
root      2979  0.0  0.0      0     0 ?        S<   22:59   0:00 [xfs-eofblocks/s]
root      2984  0.0  0.0      0     0 ?        S    22:59   0:00 [xfsaild/sda1]
root      3484  0.0  0.0      0     0 ?        S<   22:59   0:00 [kdmflush]
root      3487  0.0  0.0      0     0 ?        S<   22:59   0:00 [bioset]
root      3496  0.0  0.0      0     0 ?        S<   22:59   0:00 [xfs-buf/dm-2]
root      3497  0.0  0.0      0     0 ?        S<   22:59   0:00 [xfs-data/dm-2]
root      3498  0.0  0.0      0     0 ?        S<   22:59   0:00 [xfs-conv/dm-2]
root      3499  0.0  0.0      0     0 ?        S<   22:59   0:00 [xfs-cil/dm-2]
root      3500  0.0  0.0      0     0 ?        S<   22:59   0:00 [xfs-reclaim/dm-]
root      3501  0.0  0.0      0     0 ?        S<   22:59   0:00 [xfs-log/dm-2]
root      3502  0.0  0.0      0     0 ?        S<   22:59   0:00 [xfs-eofblocks/d]
root      3503  0.0  0.0      0     0 ?        S    22:59   0:00 [xfsaild/dm-2]
root      3524  0.0  0.0  55248   900 ?        S<sl 22:59   0:00 /sbin/auditd
root      3546  0.0  0.0  26104  1740 ?        Ss   22:59   0:00 /usr/lib/systemd/systemd-logind
polkitd   3548  0.0  0.6 611976 12128 ?        Ssl  22:59   0:00 /usr/lib/polkit-1/polkitd --no-debug
root      3549  0.0  0.0  21260  1232 ?        Ss   22:59   0:00 /usr/sbin/irqbalance --foreground
dbus      3552  0.1  0.1  66208  2580 ?        Ssl  22:59   0:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
chrony    3555  0.0  0.0 117804  1704 ?        S    22:59   0:00 /usr/sbin/chronyd
root      3566  0.1  0.5 547192 10636 ?        Ssl  22:59   0:00 /usr/sbin/NetworkManager --no-daemon
root      3596  0.4  0.0 123848  1600 ?        Ss   22:59   0:00 /usr/sbin/crond -n
root      3600  0.0  0.0 110092   860 tty1     Ss+  22:59   0:00 /sbin/agetty --noclear tty1 linux
root      3616  0.0  0.2 107204  5452 ?        S    22:59   0:00 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-eth0.pid -lf /var/lib/NetworkManager/dhcl
root      3856  0.0  0.2 112604  4308 ?        Ss   22:59   0:00 /usr/sbin/sshd -D
root      3857  0.3  0.9 573676 17108 ?        Ssl  22:59   0:00 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
root      3861  0.1  0.2 285896  3968 ?        Ssl  22:59   0:00 /usr/sbin/rsyslogd -n
mysql     3932  0.5  9.3 1119716 176176 ?      Sl   22:59   0:00 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
root      4252  0.0  0.1  90252  2184 ?        Ss   22:59   0:00 /usr/libexec/postfix/master -w
postfix   4271  0.0  0.2  90356  4264 ?        S    22:59   0:00 pickup -l -t unix -u
postfix   4272  0.0  0.2  90424  4288 ?        S    22:59   0:00 qmgr -l -t unix -u
root      4428  0.3  0.3 158608  5760 ?        Ds   22:59   0:00 sshd: root@pts/0
root      4431  0.0  0.1 115544  2152 pts/0    Ss   22:59   0:00 -bash
root      4467  0.0  0.0  18904   896 ?        Ss   23:01   0:00 nginx: master process nginx
nginx     4468  0.0  0.0  19360  1628 ?        S    23:01   0:00 nginx: worker process
root      4470  0.0  0.2 231100  5068 ?        Ss   23:01   0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www-data  4471  0.0  0.2 231100  4612 ?        S    23:01   0:00 php-fpm: pool www
www-data  4472  0.0  0.2 231100  4612 ?        S    23:01   0:00 php-fpm: pool www
root      4474  0.0  0.0 155080  1808 pts/0    R+   23:01   0:00 ps aux

在这么多进程中,我们可以通过 grep 进行筛选。比如我们想找到所有的 php-fpm 进程。

[root@CentOS ~]# ps aux | grep php-fpm
root      4470  0.0  0.2 231100  5068 ?        Ss   23:01   0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www-data  4471  0.0  0.2 231100  4612 ?        S    23:01   0:00 php-fpm: pool www
www-data  4472  0.0  0.2 231100  4612 ?        S    23:01   0:00 php-fpm: pool www
root      4477  0.0  0.0 110248   668 pts/0    S+   23:02   0:00 grep --color=auto php-fpm

在输出结果中第二列就是我们所需要的进程 PID,但是似乎多了一行,也就是最后一行。

[root@CentOS ~]# ps aux | grep php-fpm | grep -v grep
root      4470  0.0  0.2 231100  5068 ?        Ss   23:01   0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www-data  4471  0.0  0.2 231100  4612 ?        S    23:01   0:00 php-fpm: pool www
www-data  4472  0.0  0.2 231100  4612 ?        S    23:01   0:00 php-fpm: pool www

grep -v grep 表示取消包含 grep 字符串的行。

接下来就要去获取我们所需要的PID了。

[root@CentOS ~]# ps aux | grep php-fpm | grep -v grep | awk '{print $2}'
4470
4471
4472

再把获取的 PID 传给 kill 命令进行杀死。

[root@CentOS ~]# ps aux | grep php-fpm | grep -v grep | awk '{print $2}' | xargs kill -9

这样就杀掉了所有 php-fpm 的进程。

另附上一个简单的脚本,另脚本名称: kill-by-key.sh

#!/bin/bash

kill_by_key(){
    ps aux | grep "$2" | grep -v grep | grep -v "$1" | awk '{print $2}' | xargs kill -9
}
ps aux | grep "$1" | grep -v grep | grep -v "$0"
read -r -p "Are You Sure To Kill These Processes? [Y/n] " input
case $input in
    [yY][eE][sS]|[yY])
        kill_by_key $0 $1
        ;;

    [nN][oO]|[nN])
               ;;

    *)
    echo "Invalid input..."
    exit 1
    ;;
esac

使用方法很简单。

./kill-by-key.sh php-fpm