乐趣区

关于linux:linux-pgrep-和-pkill-命令使用案例

Linux 深受开发人员和爱好者的青睐。您能够做许多通常在 windows 和 OSX 等操作系统上不能做的事件。

对于程序员、开发人员以及任何想要正确理解操作系统的人来说,Linux 是最好的操作系统。当初 Linux 有很多性能和能力。明天您将学习 Linux 的 pgrep 和 pkill 命令,以及如何应用它们让您的 Linux 体验更丝滑。顾名思义,pgrep 命令用于依据过程名搜寻过程,pkill 命令将依据过程名终止或杀死过程。

前置条件

  • A Linux operating system

pgrep 命令

语法: pgrep [options] pattern

少数 Linux 用户都意识 grep 命令,该命令用于查找特定的单词或字符。pgrep 的工作原理简直雷同。搜寻正在零碎上运行的过程 (基于名称) 时应用 pgrep 命令。

(1) 列印特定用户领有的过程 ID (-u)

pgrep 列出与指定的条件相匹配的过程 id。例如:列出所有 apache 用户领有的 httpd 过程。

[[email protected] ~]# pgrep -u apache httpd
1274
1275
1278
1282
1283
1284
1286
1291
[[email protected] ~]#

(2) 列出多个用户领有的所有过程

假如咱们要列出 root 和 apache 用户领有的所有过程,执行以下命令

[[email protected] ~]# pgrep -u apache,root

在这里,用户之间用逗号 (,) 分隔。

(3) 统计匹配过程数 (-c)

应用 -c 选项计算与用户关联的过程数。

假如咱们想要统计 apache 和 root 用户领有的过程数量,运行以下命令

[[email protected] ~]# pgrep -u apache -c
8
[[email protected] ~]# pgrep -u root -c
95
[[email protected] ~]#

(4) 列出过程 id 和过程名 (-l & -a)

pgrep 命令中应用 -l-a 选项能够列出与用户相关联的过程 id 和过程名。-l 选项将只列出过程名,而 -a 将列出过程名的残缺门路。

[[email protected] ~]# pgrep -u apache -l
4353 httpd
4354 httpd
4355 httpd
4356 httpd
4357 httpd
4358 httpd
4359 httpd
4360 httpd
[[email protected] ~]#

[[email protected] ~]# pgrep -u apache -a
4353 /usr/sbin/httpd -DFOREGROUND
4354 /usr/sbin/httpd -DFOREGROUND
4355 /usr/sbin/httpd -DFOREGROUND
4356 /usr/sbin/httpd -DFOREGROUND
4357 /usr/sbin/httpd -DFOREGROUND
4358 /usr/sbin/httpd -DFOREGROUND
4359 /usr/sbin/httpd -DFOREGROUND
4360 /usr/sbin/httpd -DFOREGROUND
[[email protected] ~]#

(5) 应用自定义分隔符列出与用户关联的过程 id (-d)

Use‘-d’option in pgrep to list process ids of user
by using custom delimiter, let’s suppose we list the process ids
associated to apache user separated by comma (,) or space.

应用 -d 选项应用自定义分隔符列出用户关联的过程 id

假如咱们列出与 apache 用户相干的过程 id,用逗号或空格分隔。

[[email protected] ~]# pgrep -u apache -d,
4353,4354,4355,4356,4357,4358,4359,4360
[[email protected] ~]# pgrep -u apache -d" "
4353 4354 4355 4356 4357 4358 4359 4360
[[email protected] ~]#

(6) 列出最新过程名称及其 ID (-n)

假如咱们想要列出 root 用户领有的最新的过程名及其 id,执行上面的命令

语法: pgrep -u <user> -n -l

[[email protected] ~]# pgrep -u root -n -l
11255 kworker/0:2
[[email protected] ~]#

(7) 列出最古老的过程名及其 id (-o)

假如咱们想要列出 root 用户领有的最老的过程名及其 id,执行上面的命令

语法: pgrep -u <user> -o -l

[[email protected] ~]# pgrep -u root -o -l
1 systemd
[[email protected] ~]#

(8) 搜寻相干过程及其名称

假如咱们要列出与 postgres 过程相干的所有过程 id

[[email protected] ~]# pgrep postgres -l
1233 postgres
1234 postgres
4465 postgres
4469 postgres
[[email protected] ~]#

pkill 命令

pkill 命令用于通过命令行杀死过程。与 kill 命令不同,pkill 不须要输出要终止的过程的 ID。

语法: pkill [options] <pattern>

(9) 依据过程的名称终止过程 (pkill {process_name})

例如,你想终止 postgres 过程,如下所示

[[email protected] ~]# pkill postgres
[[email protected] ~]#

如果 postgres 过程正在运行,那么它将立刻被终止。

(10) 通过发送不同的信号终止过程 (–signal)

By default pkill command use“SIGTERM”signal during its execution. We can change this default signal using“–signal”option in pkill command, for instance,

默认状况下,pkill 命令在执行过程中应用 SIGTERM 信号。咱们能够应用 pkill 命令中的 -signal 选项来更改这个默认信号。

[[email protected] ~]# pkill --signal SIGKILL postgres
[[email protected] ~]#

(11) 基于残缺命令杀死过程 (-f)

We can instruct the pkill command to kill a process based on full command instead of process name using the -f option. What does this mean? Let’s say two ping commands are running on your system.

咱们能够应用 -f 选项批示 pkill 命令依据残缺命令而不是过程名来杀死过程。

这是什么意思 ? 假如您的零碎上正在运行两个 ping 命令。

ping google.com

ping linuxtechi.com

Now, if the requirement is only to terminate the‘ping google.com’command using pkill. You can use pkill the following way:

如果要求只是终止 ping google.com 命令,您能够通过以下形式应用 pkill

[[email protected] ~]# pkill -f "ping google.com"
[[email protected] ~]#

如果不应用 -f 选项,这两个命令都将被终止。

[[email protected] ~]# pkill ping

我的开源我的项目

  • course-tencent-cloud(酷瓜云课堂 – gitee 仓库)
  • course-tencent-cloud(酷瓜云课堂 – github 仓库)
退出移动版