GNU/Linux >> Linux の 問題 >  >> Linux

ps:親プロセスのみを取得するクリーンな方法は?

/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

Linux
  1. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

  2. Bash =〜正規表現とHttps://regex101.com/?

  3. #!/usr/bin/env bash と #!/usr/bin/bash の違いは何ですか?

  1. /usr/lib/x86_64-linux-gnu/libstdc++.so.6:バージョン CXXABI_1.3.8' が見つかりません

  2. /bin と /usr/bin の違い

  3. /bin の内容を /usr/bin に移動しました。元に戻すことはできますか?

  1. / usr/binと/usr/ local / bin Linuxの場合?

  2. /home、/usr、/var などのディレクトリがすべて同じ inode 番号 (2) を持っているのはなぜですか?

  3. CentOS /usr/local/lib システム全体 $LD_LIBRARY_PATH?