/usr/bin/pgrep -o <process_name>
「-o」は、一致するプロセスの中で最も古い (最も最近開始されていない) プロセスです
別の解決策 (ここから):
ps -ocommand= -p $PPID | awk -F/ '{print $NF}' | awk '{print $1}'
回答のコメントについて @netcoder と話し合った後、彼は素晴らしいトリックを使用しました :D
f
の使用 ps
に 常に上位に親が表示されます。これはすばらしいことです。
これはうまくいくはずです:
$ ps hf -opid -C <process> | awk '{ print $1; exit }'
コメントで述べたように、これは pid
を返します たった1つのプロセスで。
私なら:
ps rf -opid,cmd -C <process-name> | awk '$2 !~ /^[|\\]/ { print $1 }'
つまり:
- 実行中のプロセスのリスト
r
(またはe
すべてが必要な場合) - 親子グラフ
f
とともに - pid とコマンド名のみを出力
-opid,cmd
- 指定されたプロセスのみ
-C <process>
そして
- 2 番目のフィールドの場合 - コマンド (
-opid,cmd
) -\
で始まらない または|
それは親プロセスなので、1 番目のフィールド (pid) を出力します。
簡単なテスト:
$ ps f -opid,cmd -Cchromium
PID CMD
2800 /usr/lib/chromium/chromium --type=zygote --enable-seccomp-sandbox
2803 \_ /usr/lib/chromium/chromium --type=zygote --enable-seccomp-sandbox
2899 \_ /usr/lib/chromium/chromium --type=renderer --enable-seccomp-sandbox --lang=en-US --force-fieldtrials=ConnCountImpact/conn_count_6/ConnnectB
2906 | \_ /usr/lib/chromium/chromium --type=renderer --enable-seccomp-sandbox --lang=en-US --force-fieldtrials=ConnCountImpact/conn_count_6/Connn
[ ... snip ... ]
2861 \_ /usr/lib/chromium/chromium --type=renderer --enable-seccomp-sandbox --lang=en-US --force-fieldtrials=ConnCountImpact/conn_count_6/ConnnectB
2863 \_ /usr/lib/chromium/chromium --type=renderer --enable-seccomp-sandbox --lang=en-US --force-fieldtrials=ConnCountImpact/conn_count_6/Connn
2794 /usr/lib/chromium/chromium --enable-seccomp-sandbox --memory-model=low --purge-memory-button --disk-cache-dir=/tmp/chromium
2796 \_ /usr/lib/chromium/chromium --enable-seccomp-sandbox --memory-model=low --purge-memory-button --disk-cache-dir=/tmp/chromium
3918 \_ /usr/lib/chromium/chromium --type=gpu-process --channel=2794.45.1891443837 --gpu-vendor-id=0x10de --gpu-device-id=0x0611 --gpu-driver-version -
25308 \_ [chromium] <defunct>
31932 \_ /usr/lib/chromium/chromium --type=plugin --plugin-path=/usr/lib/mozilla/plugins/libflashplayer.so --lang=en-US --channel=2794.1330.1990362572
$ ps f -opid,cmd -Cchromium | awk '$2 !~ /^[|\\]/ { print $1 }'
PID
2800
2794
$ # also supressing the header of ps (top line 'PID') -- add 'h' to ps
$ ps hf -opid,cmd -Cchromium | awk '$2 !~ /^[|\\]/ { print $1 }'
2800
2794