Shell-Script

如何找到特定程序的 PID?

  • December 26, 2015

我想編寫一個 Bash 腳本來搜尋與程序名稱匹配的 PID(可能使用ps ax | grep <PROGRAM>或類似的東西)並將它們提供給pixelb 的ps_mem腳本ps_mem需要以逗號分隔的 PID 列表(無空格)以評估 RAM 使用情況,不幸的是,我知道按程序名稱搜尋程序的唯一方法是ps ax | grep <PROGRAM>返回類似的內容(以 GitHub 的 Atom 文本編輯器為例) :

7365 pts/2    S      0:00 /bin/bash /usr/bin/atom /home/fusion809/GitHub/fusion809.github.io
7367 pts/2    Sl     2:09 /usr/share/atom/atom --executed-from=/home/fusion809/GitHub/fusion809.github.io --pid=7354 /home/fusion809/GitHub/fusion809.github.io
7369 pts/2    S      0:00 /usr/share/atom/atom --type=zygote --no-sandbox
7404 pts/2    Sl    69:11 /usr/share/atom/atom --type=renderer --js-flags=--harmony --no-sandbox --lang=en-GB --node-integration=true --enable-delegated-renderer --num-raster-threads=2 --gpu-rasterization-msaa-sample-count=8 --content-image-texture-target=3553 --video-image-texture-target=3553 --disable-accelerated-video-decode --disable-webrtc-hw-encoding --disable-gpu-compositing --channel=7367.0.1287479693 --v8-natives-passed-by-fd --v8-snapshot-passed-by-fd
7469 pts/2    S      0:02 /usr/share/atom/atom --eval require('/usr/share/atom/resources/app.asar/src/compile-cache.js').setCacheDirectory('/home/fusion809/.atom/compile-cache'); require('/usr/share/atom/resources/app.asar/src/task-bootstrap.js');
10094 pts/2    Sl     0:31 /usr/share/atom/atom --type=renderer --js-flags=--harmony --no-sandbox --lang=en-GB --node-integration=true --enable-delegated-renderer --num-raster-threads=2 --gpu-rasterization-msaa-sample-count=8 --content-image-texture-target=3553 --video-image-texture-target=3553 --disable-accelerated-video-decode --disable-webrtc-hw-encoding --disable-gpu-compositing --channel=7367.1.769162379 --v8-natives-passed-by-fd --v8-snapshot-passed-by-fd
11799 pts/2    S      0:01 /usr/share/atom/atom --eval require('/usr/share/atom/resources/app.asar/src/compile-cache.js').setCacheDirectory('/home/fusion809/.atom/compile-cache'); require('/usr/share/atom/resources/app.asar/src/task-bootstrap.js');
18686 pts/2    Sl     0:02 /usr/share/atom/atom --eval require('/usr/share/atom/resources/app.asar/src/compile-cache.js').setCacheDirectory('/home/fusion809/.atom/compile-cache'); require('/usr/share/atom/resources/app.asar/src/task-bootstrap.js');
31761 pts/6    S+     0:00 grep --colour=auto atom

如您所見,這與ps_mem接受的語法相去甚遠。有沒有辦法從 Bash 腳本中的這個輸出中提取 PID,或者有沒有辦法以其他方式以可接受的格式在 Bash 腳本中獲取指定程序的 PID ps_mem

Pidof 命令返回 PID 並由給定的程序名稱引入。

根據 entiend,您想要獲取以逗號分隔的 PID 列表,對應於作為程序名稱的潛在 PID。Pidof 命令來獲取它,但在由空格分隔的 PID 列表中。在 tr 命令的幫助下,可以截斷對應於由另一個字元的輸出 pid 分隔的空格的字元,在這種情況下是逗號命令。它可以這樣做:

pidof <process_name> | tr '\ ' ',' 

pgrep 和 tr 呢?不確定最後一個逗號是否有問題。

$ pgrep chrome | tr '\n' ,
1960,1981,1982,1984,1987,2008,2047,2079,2103,2107,2117,2123,2219,4132,4559,

引用自:https://unix.stackexchange.com/questions/251353