特定の画面で実行されているプロセスのすべてのPIDを一覧表示するコマンドをどのように実行できますか? (複数のタブが開いているので、いくつかのbashプロセスが実行されていると仮定します)次の投稿が見つかりました。スクリーンセッションでどのコマンドが実行されているかをご覧ください。
このコマンドは、画面上のプロセスが 1 つだけ実行された場合に機能しますが、画面セッションに複数のタブが開いている場合は失敗します。私が得るエラーは次のとおりです。
注文する:
ps u -p $(ps -el | grep $(ps -el | grep 28572 | grep bash | awk '{print $4}') | grep -v bash | awk '{print $4}')
出力:
grep: 28573: そのファイルまたはディレクトリがありません。
修正する:
次のコマンドシーケンスは予想される結果を生成します。
すべての画面プロセスをインポートする
ps waux | grep -i screen | grep -v grep | awk '{print $2}' | paste -s -d,
スクリーンセッションで実行されているすべてのプロセスをインポートする
pgrep -P $(ps waux | grep -i screen | grep -v grep | awk '{print $2}' | paste -s -d,) | paste -s -d,
スクリーンセッションで実行されているプロセスで実行されているすべてのJavaプロセスを取得する
ps -w -p $(pgrep -P $(pgrep -P $(ps waux | grep -i screen | grep -v grep | awk '{print $2}' | paste -s -d,) | paste -s -d,) | paste -s -d,) | grep java
指示:
java
私はスクリーンセッション内で実行されているプロセスにのみ興味があります。- 私はこのコマンドを使用してコンマ区切りのプロセス識別子のリストを取得し、コマンド
paste
オプションの引数として使用します。-P
pgrep
アップデート2:
paste
このコマンドを使用しない方法が見つかりましたxargs
。
ps waux | grep -i screen | grep -v grep | awk '{print $2}' | xargs -I{} pgrep -P {} | xargs -I{} pgrep -P {} | xargs -I{} ps -w -p {} | grep java
答え1
ただし、この方法はスクリーンセッションが開いている場合にのみ機能します。
ps waux | grep screen$ | awk '{print $2}' | xargs pstree
例えば
jeff@linux:~$ ps waux | grep screen$ | awk '{print $2}' | xargs pstree
screen───screen─┬─bash───top
├─bash───watch
└─bash───xargs───pstree
複数のスクリーンセッションがある場合は、次のように繰り返すことができます。
jeff@jlinux:~$ for pid in $(ps waux | grep screen$ | awk '{print $2}'); do pstree $pid; done
screen───screen───bash
screen───screen─┬─bash───top
├─bash───watch
└─bash───pstree