最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux使用pgrep命令按名稱查找進程 PID的高效方法詳解

 更新時間:2026年06月03日 08:36:59   作者:用戶236782980168  
pgrep是Linux系統(tǒng)中用于根據(jù)進程名或屬性查找進程PID的高效工具,相比ps aux | grep的組合方式,它避免了grep自身進程的干擾,輸出更干凈,本文詳細介紹了pgrep的核心參數(shù)并提供了與pkill配合使用、底層原理分析以及多個實戰(zhàn)腳本示例,需要的朋友可以參考下

摘要pgrep 是 Linux 系統(tǒng)中用于根據(jù)進程名或屬性查找進程 PID 的高效工具,相比 ps aux | grep 的組合方式,它避免了 grep 自身進程的干擾,輸出更干凈。本文詳細介紹了 pgrep 的核心參數(shù)(如 -f 匹配完整命令行、-u 按用戶篩選、-l/-a 顯示進程信息等),并提供了與 pkill 配合使用、底層原理分析以及多個實戰(zhàn)腳本示例,幫助讀者快速掌握進程查找與管理的技巧。

為什么需要 pgrep?

排查線上問題時,最常見的需求就是"找到某個進程的 PID"。很多人習慣用 ps aux | grep xxx,但這種方式有個讓人頭疼的問題——grep 自身也會出現(xiàn)在結果里:

$ ps aux | grep nginx
root      1234  0.1  0.3  54200  3120 ?        Ss   10:00   0:00 nginx: master process
www-data  1235  0.0  0.2  54600  2840 ?        S    10:00   0:00 nginx: worker process
user      5678  0.0  0.0  11268   960 pts/0    S+   10:05   0:00 grep --color=auto nginx

最后一行 grep nginx 就是噪音。雖然可以用 ps aux | grep nginx | grep -v grep 過濾,但寫起來很啰嗦。

pgrep 就是為解決這個問題而生的——它直接返回匹配的 PID,干凈利落。

基本用法

# 查找 nginx 的所有 PID
$ pgrep nginx
1234
1235

輸出就是純 PID,一行一個,可以直接傳給其他命令:

# 殺死所有 nginx 進程
$ pgrep nginx | xargs kill

# 查看某個進程的詳細信息
$ ps -p $(pgrep -o nginx) -f

核心參數(shù)詳解

-f:匹配完整命令行

默認情況下,pgrep 只匹配進程名的前 15 個字符(這是 Linux 內核的限制)。如果你的 Python 腳本名字很長,可能匹配不到:

# 默認只匹配進程名,可能匹配不到
$ pgrep my_long_python_script
# 沒輸出

# -f 匹配完整命令行
$ pgrep -f "my_long_python_script"
12345

這個參數(shù)在實際工作中用得最多,因為大多數(shù)時候我們想匹配的是命令行參數(shù),而不是進程名本身:

# 查找所有運行 python app.py 的進程
$ pgrep -f "python app.py"
12345
12346

# 查找監(jiān)聽 8080 端口的 java 進程
$ pgrep -f "java.*8080"
56789

-u:按用戶篩選

在多用戶服務器上,這個參數(shù)非常實用:

# 查找 www-data 用戶的所有進程
$ pgrep -u www-data
1234
1235
1236

# 組合使用:查找 root 用戶的 nginx 進程
$ pgrep -u root nginx
1234

# 排除某個用戶:查找非 root 的所有 node 進程
$ pgrep -u root -v node
23456
23457

-v 是反向匹配,類似 grep 的 -v。

-l 和 -a:顯示進程 信息

默認只輸出 PID,不太直觀:

# -l 顯示 PID 和進程名
$ pgrep -l nginx
1234 nginx
1235 nginx

# -a 顯示 PID 和完整命令行
$ pgrep -a node
12345 node /app/server.js
12346 node /app/worker.js

調試時用 -a 特別方便,一眼就能看到每個進程在干什么。

-n 和 -o:最新和最舊

當一個服務有多個進程時,你可能只想操作其中一個:

# 只獲取最新的 node 進程(最后啟動的)
$ pgrep -n node
12346

# 只獲取最舊的 node 進程(最先啟動的)
$ pgrep -o node
12345

這在重啟服務時很有用——先殺掉舊進程,再啟動新的:

# 重啟 node 服務
$ kill $(pgrep -o node) && npm start

-c:統(tǒng)計匹配數(shù)量

有時候你不需要具體的 PID,只想知道有多少個:

# nginx 跑了幾個 worker?
$ pgrep -c nginx
3

# 某個用戶跑了多少個 node 進程?
$ pgrep -u deploy -c node
5

-P:按父進程查找

查找某個進程的所有子進程:

# 找到 PID 為 1234 的所有子進程
$ pgrep -P 1234
1235
1236
1237

這在排查進程樹時很有用,比如你想知道某個主進程下面掛了多少工作進程。

-x:精確匹配

默認是正則模糊匹配,pgrep ssh 會同時匹配 sshdssh-agent

# 模糊匹配(默認)
$ pgrep ssh
1234    # sshd
1235    # ssh-agent

# 精確匹配
$ pgrep -x sshd
1234

-d:自定義分隔符

默認輸出用換行分隔,但你可以改成逗號、空格等:

# 逗號分隔,方便傳給其他命令
$ pgrep -d, nginx
1234,1235,1236

# 空格分隔
$ pgrep -d' ' nginx
1234 1235 1236

pgrep 與 pkill 的配合

pkillpgrep 的"兄弟命令",用法幾乎一樣,只不過它是直接發(fā)信號給匹配的進程:

# 優(yōu)雅重啟 nginx
$ pkill -HUP nginx

# 殺死所有 node 進程
$ pkill node

# 殺死某個用戶的所有進程(慎用?。?
$ pkill -u username

pgrep 先查、pkill 后殺,組合起來就是一套完整的進程管理流程。

pgrep 底層原理

pgrep 的實現(xiàn)并不復雜。它直接讀取 /proc 文件系統(tǒng) ,遍歷 /proc/[pid]/ 目錄下的進程信息:

# pgrep 本質上就是在遍歷這些目錄
$ ls /proc | grep -E '^[0-9]+$'
1    10   123  124  ...

每個進程目錄下有 comm(進程名)和 cmdline(完整命令行)等文件:

# 查看進程名
$ cat /proc/1234/comm
nginx

# 查看完整命令行
$ cat /proc/1234/cmdline | tr '\0' ' '
nginx: master process /usr/sbin/nginx -g daemon on;

pgrep-f 參數(shù)就是去讀 cmdline,默認模式則讀 comm。這也是為什么 -f 會慢一點——讀取和匹配的數(shù)據(jù)量更大。

實戰(zhàn)腳本示例

1. 檢查服務是否運行

#!/bin/bash
# check_service.sh
SERVICE=$1

if pgrep -x "$SERVICE" > /dev/null; then
    echo "$SERVICE is running (PID: $(pgrep -o $SERVICE))"
else
    echo "$SERVICE is not running"
    exit 1
fi

2. 批量重啟所有 node 進程

#!/bin/bash
# restart_all_node.sh
PIDS=$(pgrep -f "node.*app")

if [ -z "$PIDS" ]; then
    echo "No node app processes found"
    exit 0
fi

echo "Found node processes: $PIDS"
echo "$PIDS" | xargs kill
sleep 2
npm start
echo "Restarted"

3. 監(jiān)控進程數(shù)量告警

#!/bin/bash
# monitor_workers.sh
MAX_WORKERS=10
COUNT=$(pgrep -c -f "python worker")

if [ "$COUNT" -gt "$MAX_WORKERS" ]; then
    echo "WARNING: Too many workers ($COUNT > $MAX_WORKERS)"
    # 發(fā)送告警
fi

小結

相比 ps aux | grep 的組合拳,它更簡潔、更干凈、更適合在腳本中使用。幾個最常用的場景:

  • 快速查 PIDpgrep nginx
  • 查看完整命令pgrep -af node
  • 統(tǒng)計進程數(shù)pgrep -c -f "python worker"
  • 按用戶過濾pgrep -u www-data -l

以上就是Linux使用pgrep命令按名稱查找進程 PID的高效方法詳解的詳細內容,更多關于Linux pgrep按名稱查找進程PID的資料請關注腳本之家其它相關文章!

相關文章

最新評論

娄烦县| 南汇区| 会宁县| 临猗县| 启东市| 定结县| 玉屏| 钦州市| 龙游县| 盐池县| 庄浪县| 策勒县| 庄浪县| 华坪县| 大化| 美姑县| 乌兰浩特市| 社会| 龙南县| 绥宁县| 彩票| 白城市| 抚州市| 新河县| 吐鲁番市| 灵山县| 盐边县| 凯里市| 梁平县| 呼图壁县| 晋江市| 永安市| 昔阳县| 溧阳市| 海门市| 汤原县| 班戈县| 喜德县| 五常市| 西吉县| 延吉市|