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 进程。
[root@linuxtechi ~]# pgrep -u apache httpd
1274
1275
1278
1282
1283
1284
1286
1291
[root@linuxtechi ~]#
(2) 列出多个用户拥有的所有进程
假设我们要列出 root 和 apache 用户拥有的所有进程,执行以下命令
[root@linuxtechi ~]# pgrep -u apache,root
在这里,用户之间用逗号 (,) 分隔。
(3) 统计匹配进程数 (-c)
使用 -c
选项计算与用户关联的进程数。
假设我们想要统计 apache 和 root 用户拥有的进程数量,运行以下命令
[root@linuxtechi ~]# pgrep -u apache -c
8
[root@linuxtechi ~]# pgrep -u root -c
95
[root@linuxtechi ~]#
(4) 列出进程 id 和进程名 (-l & -a)
pgrep 命令中使用 -l
和 -a
选项可以列出与用户相关联的进程 id 和进程名。-l
选项将只列出进程名,而 -a
将列出进程名的完整路径。
[root@linuxtechi ~]# pgrep -u apache -l
4353 httpd
4354 httpd
4355 httpd
4356 httpd
4357 httpd
4358 httpd
4359 httpd
4360 httpd
[root@linuxtechi ~]#
[root@linuxtechi ~]# 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
[root@linuxtechi ~]#
(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,用逗号或空格分隔。
[root@linuxtechi ~]# pgrep -u apache -d,
4353,4354,4355,4356,4357,4358,4359,4360
[root@linuxtechi ~]# pgrep -u apache -d" "
4353 4354 4355 4356 4357 4358 4359 4360
[root@linuxtechi ~]#
(6) 列出最新进程名称及其 ID (-n)
假设我们想要列出 root 用户拥有的最新的进程名及其 id,执行下面的命令
语法: pgrep -u <user> -n -l
[root@linuxtechi ~]# pgrep -u root -n -l
11255 kworker/0:2
[root@linuxtechi ~]#
(7) 列出最古老的进程名及其 id (-o)
假设我们想要列出 root 用户拥有的最老的进程名及其 id,执行下面的命令
语法: pgrep -u <user> -o -l
[root@linuxtechi ~]# pgrep -u root -o -l
1 systemd
[root@linuxtechi ~]#
(8) 搜索相关进程及其名称
假设我们要列出与 postgres 进程相关的所有进程 id
[root@linuxtechi ~]# pgrep postgres -l
1233 postgres
1234 postgres
4465 postgres
4469 postgres
[root@linuxtechi ~]#
pkill 命令
pkill 命令用于通过命令行杀死进程。与 kill 命令不同,pkill 不需要输入要终止的进程的 ID。
语法: pkill [options] <pattern>
(9) 根据进程的名称终止进程 (pkill {process_name})
例如,你想终止 postgres 进程,如下所示
[root@linuxtechi ~]# pkill postgres
[root@linuxtechi ~]#
如果 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
选项来更改这个默认信号。
[root@linuxtechi ~]# pkill --signal SIGKILL postgres
[root@linuxtechi ~]#
(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
[root@linuxtechi ~]# pkill -f "ping google.com"
[root@linuxtechi ~]#
如果不使用 -f
选项,这两个命令都将被终止。
[root@linuxtechi ~]# pkill ping
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。