Shell-Script
如何找到特定程序的 PID?
我想編寫一個 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 腳本中獲取指定程序的 PIDps_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,