我想编写一个 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
?
答案1
pidof 命令返回由给定进程名称引入的 PID。
根据entiend,您想要获取以逗号分隔的PID列表,对应于作为进程名称的潜在PID。 PIDof 命令可以获取该信息,但是以空格分隔的 PID 列表。借助 tr 命令可以截断与由另一个字符(在本例中为逗号命令)所述输出 pid 分隔的空格相对应的字符。它可以这样做:
pidof <process_name> | tr '\ ' ','
答案2
pgrep 和 tr 怎么样?不确定最后一个逗号是否有问题。
$ pgrep chrome | tr '\n' ,
1960,1981,1982,1984,1987,2008,2047,2079,2103,2107,2117,2123,2219,4132,4559,