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

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

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

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

為什么需要 pgrep?

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

$ 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 內(nèi)核的限制)。如果你的 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:按用戶篩選

在多用戶服務(wù)器上,這個參數(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

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

-n 和 -o:最新和最舊

當(dāng)一個服務(wù)有多個進程時,你可能只想操作其中一個:

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

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

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

# 重啟 node 服務(wù)
$ 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)并不復(fù)雜。它直接讀取 /proc 文件系統(tǒng) ,遍歷 /proc/[pid]/ 目錄下的進程信息:

# pgrep 本質(zhì)上就是在遍歷這些目錄
$ 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. 檢查服務(wù)是否運行

#!/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

小結(jié)

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

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

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

相關(guān)文章

  • Linux find 命令完全指南及核心用法

    Linux find 命令完全指南及核心用法

    find 是 Linux 系統(tǒng)最強大的文件搜索工具,支持 嵌套遍歷、條件篩選、執(zhí)行動作,下面給大家介紹Linux find 命令完全指南,感興趣的朋友一起看看吧
    2025-03-03
  • shell腳本設(shè)置日志格式的方法

    shell腳本設(shè)置日志格式的方法

    本文給大家分享shell腳本設(shè)置日志格式的相關(guān)知識,設(shè)置日志級別并輸出對應(yīng)日志,文中還給大家提到了shell輸出格式化日志信息的腳本,感興趣的朋友跟隨小編一起看看吧
    2022-10-10
  • shell腳本實現(xiàn)ssh自動登錄功能分享

    shell腳本實現(xiàn)ssh自動登錄功能分享

    mac下沒有找到好用的類似secureCRT,就自己寫了個自動登錄的腳本,分享一下,如果是新浪的,就基本不用修改代碼就直接能用
    2014-04-04
  • awk中實現(xiàn)ord函數(shù)功能

    awk中實現(xiàn)ord函數(shù)功能

    這篇文章主要介紹了awk中實現(xiàn)ord函數(shù)功能,ord函數(shù)用來將字符轉(zhuǎn)化對應(yīng)的ascii碼,本文給出awk中的ord函數(shù)實現(xiàn)方法,需要的朋友可以參考下
    2014-08-08
  • linux shell txt轉(zhuǎn)換成html的實現(xiàn)代碼

    linux shell txt轉(zhuǎn)換成html的實現(xiàn)代碼

    這篇文章主要介紹了linux shell txt轉(zhuǎn)換成html的實現(xiàn)代碼,需要的朋友可以參考下
    2016-11-11
  • shell腳本中/bin/bash的作用引號與括號的使用小結(jié)

    shell腳本中/bin/bash的作用引號與括號的使用小結(jié)

    shell腳本通常第一句是#!/bin/bash,在很多情況中,如果沒有設(shè)置好這一行,那么該程序很可能無法執(zhí)行,#!/bin/bash是指此腳本使用/bin/bash來解釋執(zhí)行,本文給大家介紹shell腳本中/bin/bash的作用,引號與括號的使用,感興趣的朋友一起看看吧
    2023-12-12
  • Shell腳本實現(xiàn)自動輸入密碼登錄服務(wù)器

    Shell腳本實現(xiàn)自動輸入密碼登錄服務(wù)器

    這篇文章主要介紹了Shell腳本實現(xiàn)自動輸入密碼登錄服務(wù)器,本文使用expect來實現(xiàn)這個需求,講解了expect的安裝及使用腳本,需要的朋友可以參考下
    2015-03-03
  • Linux 中(加、減、乘、除)實例詳解

    Linux 中(加、減、乘、除)實例詳解

    這篇文章主要介紹了 Linux 中(加、減、乘、除)實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • shell腳本實現(xiàn)多進程運行的方法示例

    shell腳本實現(xiàn)多進程運行的方法示例

    這篇文章主要給大家分享了shell腳本實現(xiàn)多進程運行的方法示例,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • shell的條件測試,變量測試,表達式中的0和1,數(shù)值判斷,字符串判斷

    shell的條件測試,變量測試,表達式中的0和1,數(shù)值判斷,字符串判斷

    本文主要介紹了shell的條件測試,變量測試,表達式中的0和1,數(shù)值判斷,字符串判斷,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01

最新評論

镇远县| 鲁甸县| 龙海市| 应城市| 景洪市| 碌曲县| 延长县| 贵德县| 扎赉特旗| 巴里| 简阳市| 松潘县| 磐安县| 白沙| 洛南县| 玛沁县| 囊谦县| 高陵县| 田东县| 阿荣旗| 石台县| 塘沽区| 鹤山市| 苏尼特右旗| 封开县| 昭苏县| 呼图壁县| 西乌珠穆沁旗| 舒城县| 仪征市| 贵港市| 定远县| 绥阳县| 安福县| 益阳市| 鄂州市| 长丰县| 获嘉县| 勐海县| 田阳县| 满城县|