前言
在之前,我们学习了三个有关进程监控的指令,但是好像无法去精确查找到某个进程名的PID,所以我们今天主要来学习一下进程的查找,以及进程之间的通讯机制——信号。
定义
pgrep是一个用于查找进程ID(PID)的命令,它根据进程名或其他条件返回与之匹配的进程ID。它在Linux系统中得到了广泛使用,特别是在脚本和命令行中查找并操作特定进程的时候。
语法
语法也比较简单 :“pgrep [options] pattern”
常用选项介绍
U:查找某个用户的进程id。
[root@YUTIAN ~]# pgrep -G root
G:查找某个组的进程id。
[root@YUTIAN ~]# pgrep -G root
P:根据父进程ID,查找出所有子进程id。
[root@YUTIAN ~]# pgrep -P 1
l:不仅打印pid,也打印进程名,默认只显示PID。
[root@YUTIAN ~]# pgrep -P 1 -l
o:表示如果该程序有多个进程正在运行,则仅查找最老的,即最先启动的。
[root@YUTIAN ~]# pgrep -o vim
n:表示如果该程序有多个进程正在运行,则仅查找最新的,即最后启动的。
[root@YUTIAN ~]# pgrep -n vim
d:定义多个进程之间的分隔符, 如果不定义则使用换行符。
[root@YUTIAN ~]# pgrep -d ,
示例
查找所有以nginx开头的进程ID
[root@YUTIAN ~]# pgrep nginx
查找当前用户(例如"root")的所有进程ID,并指定分割符为,
[root@YUTIAN ~]# pgrep -u root -d ,
查找root用户最先启动的vim进程
[root@YUTIAN ~]# pgrep -l -u root -o vim
查找进程名为bash并且由用户alice启动的进程ID,并显示进程ID和进程名称
[root@YUTIAN ~]# pgrep -l -u alice bash
定义
pidof是一个用于查找进程ID(PID)的命令,它根据进程名返回与之匹配的一个或多个进程ID。与pgrep不同,pidof在返回进程ID时不支持额外的选项或条件过滤,并且,pidof是精准过滤。
区别
精准过滤:过滤ssh无法过滤,只有搜索完全的进程名才能查询出来。
注意:
pidof命令通常只返回一个或多个进程ID。如果找不到匹配的进程,它将不返回任何输出。
对于一个指定的进程名,如果有多个具有相同名称的进程在运行,pidof将返回它们所有的进程ID,每个进程ID之间以空格分隔。
进程的信号机制是操作系统中用于进程间通信和控制的一种重要机制。信号是由操作系统或其他进程向目标进程发送的一个小的、异步的消息,用于通知目标进程发生了某种事件或请求目标进程执行某种操作。进程可以根据接收到的信号采取相应的行动,例如终止进程、重新加载配置、暂停或继续执行等。
进程的信号机制在操作系统中是一种重要的通信和控制手段。通过使用信号,进程可以快速响应外部事件、处理错误情况、实现优雅退出等。然而,对于信号的处理需要谨慎,特别是对于可能中断阻塞的系统调用或关键代码段,需要正确地处理信号以避免不可预料的行为。
常见信号
SIGINT:终止信号,通常由终端键盘按下Ctrl+C产生。
SIGTERM:终止信号,请求进程正常终止。
SIGKILL:强制终止信号,用于立即终止进程,进程无法捕获或忽略该信号。
SIGSTOP:暂停信号,暂停进程的执行。
SIGCONT:继续信号,恢复进程的执行。
帮助查询
单词太长了?不好记忆,没关系,我们可以通过数值方法进行信号的发送,相应的对应列表可以通过man帮助进行查询:
[root@YUTIAN ~]# man 7 signal
常见数值
发送信号
通过pid: kill [signal] pid…
# 结束PID为12345的进程
[root@YUTIAN ~]# kill -15 12345
通过名称: killall [signal] comm…
# 结束所有名为"my_process"的进程,并使用默认终止信号SIGTERM
[root@YUTIAN ~]# killall my_process
通过模式: pkill [-signal] pattern
# 结束所有名称中包含"my"的进程,并使用默认终止信号SIGTERM
[root@YUTIAN ~]# pkill my
通过本章的学习,相信大家已经能十分熟练地进行进程的管理了。希望大家能在Linux的学习路途上越走越远,继续加油。
更多资讯请扫码了解详情: