特定のプログラムのPIDを見つける方法は?

特定のプログラムのPIDを見つける方法は?

プログラム名と一致するPIDを取得するBashスクリプトを作成したいと思います(使用するか、類似のps ax | grep <PROGRAM>名前である可能性があります)。Pixelbのps_memスクリプトps_memRAM使用量を評価するには、カンマで区切られたPIDのリスト(スペースなし)が必要です。残念ながら、プログラム名でプロセスを検索する唯一の方法は、次のような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を返します。

エンティティによると、プロセス名である潜在的な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,

関連情報