`kill -9` 和 `pkill`

kill -9pkill 是在类 Unix 系统中用来终止进程的两个不同命令,它们之间有以下主要区别:

  1. 信号不同

    • kill -9:发送 SIGKILL 信号给指定的进程。SIGKILL(信号值为 9)是一个强制杀死进程的信号,不能被进程捕获或忽略,进程将立即终止。
    • pkill:可以发送多种信号给进程,SIGKILL 只是其中之一。使用 pkill 时,可以通过 -s--signal 选项指定要发送的信号。
  2. 目标选择方式不同

    • kill -9:通常需要指定要杀死的进程的 PID(进程 ID),例如 kill -9 1234
    • pkill:通过进程名或其他属性来选择要杀死的进程,例如 pkill -9 nginx 会向所有名为 nginx 的进程发送 SIGKILL 信号。
  3. 使用范围

    • kill -9:只能杀死单个指定的进程。
    • pkill:可以杀死所有匹配特定条件的进程,这使得 pkill 更适合批量操作。
  4. 适用场景

    • kill -9:由于其强制杀死进程的特性,通常作为最后的手段使用,当其他信号(如 SIGTERM)无法终止进程时。
    • pkill:更适合需要同时终止多个相同名称或属性的进程的场景。
  5. 命令选项

    • kill -9:选项较少,主要用来发送 SIGKILL 信号。
    • pkill:有更多的选项,可以指定信号、匹配条件等。
  6. 安全性

    • kill -9:由于不能被进程捕获或忽略,使用时需要谨慎,以避免可能的数据丢失或不一致。
    • pkill:虽然也可以发送 SIGKILL,但由于其选择性更强,可以更精确地控制要杀死的进程集合。

总结来说,kill -9 是一个简单直接的命令,用于强制杀死指定的单个进程,而 pkill 提供了更多的灵活性和选择性,可以发送不同的信号并针对一组进程执行操作。在实际使用中,应根据具体需求和场景选择合适的命令。

复制代码
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
 -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

For more details see pgrep(1).

KILL(1)                                                                             User Commands                                                                            KILL(1)

NAME
       kill - terminate a process

SYNOPSIS
       kill [-s signal|-p] [-q sigval] [-a] [--] pid...
       kill -l [signal]

DESCRIPTION
       The  command  kill sends the specified signal to the specified process or process group.  If no signal is specified, the TERM signal is sent.  The TERM signal will kill pro‐
       cesses which do not catch this signal.  For other processes, it may be necessary to use the KILL (9) signal, since this signal cannot be caught.

       Most modern shells have a builtin kill function, with a usage rather similar to that of the command described here.  The '-a' and '-p' options, and the possibility to  spec‐
       ify processes by command name are a local extension.

       If sig is 0, then no signal is sent, but error checking is still performed.

OPTIONS
       pid... Specify the list of processes that kill should signal.  Each pid can be one of five things:

              n      where n is larger than 0.  The process with pid n will be signaled.

              0      All processes in the current process group are signaled.

              -1     All processes with pid larger than 1 will be signaled.

              -n     where  n  is  larger  than  1.  All processes in process group n are signaled.  When an argument of the form '-n' is given, and it is meant to denote a process
                     group, either the signal must be specified first, or the argument must be preceded by a '--' option, otherwise it will be taken as the signal to send.

              commandname
                     All processes invoked using that name will be signaled.

       -s, --signal signal
              Specify the signal to send.  The signal may be given as a signal name or number.

       -l, --list [signal]
              Print a list of signal names, or convert signal given as argument to a name.  The signals are found in /usr/include/linux/signal.h

       -L, --table
              Similar to -l, but will print signal names and their corresponding numbers.

       -a, --all
              Do not restrict the commandname-to-pid conversion to processes with the same uid as the present process.

       -p, --pid
              Specify that kill should only print the process id (pid) of the named processes, and not send any signals.

       -q, --queue sigval
              Use sigqueue(2) rather than kill(2) and the sigval argument is used to specify an integer to be sent with the signal.  If the receiving process has installed  a  han‐
              dler for this signal using the SA_SIGINFO flag to sigaction(2), then it can obtain this data via the si_value field of the siginfo_t structure.
相关推荐
ZJH__GO2 小时前
网络编程v4pro--实现聊天室文件传输功能
java·服务器·网络·计算机网络
小小、码农2 小时前
Linux进程控制:从fork到exec,手写一个简易Shell
linux·运维·服务器
不会就选b2 小时前
Linux之进程间通信(二)---模拟进程池
linux·运维·服务器
marvelyu3 小时前
每天10分钟学会OceanBase系列(Day 20):跨机房容灾实战——构建多数据中心高可用架构
java·大数据·数据库
NeilYuen3 小时前
用UDP实现向DNS服务器请求IP地址
服务器·tcp/ip·udp
ZCBUS实时计算3 小时前
金融证券实时数仓建设实践:轻量化实时计算平台落地,实现交易数据端到端秒级处理
大数据·数据库·数据仓库·金融·flink·dba·etl
zd2005724 小时前
海洋微生物数据库
数据库·宏基因组
海上小飞龙4 小时前
Redis 分布式锁原理:从 SET NX EX 到 Redisson 看门狗
数据库·redis·分布式
沫璃染墨4 小时前
《从零入门Linux系统篇(十五):系统工具篇·六——GDB调试器详解:从程序执行控制到高级调试技巧》
linux·运维·服务器·c语言·c++
xiaoye-duck4 小时前
MySQL 表约束全解:从基础约束到外键关联规则
数据库·mysql