私は開いているbashセッションを持っていて、PIDを持っています。端末を制御することはできませんが(たとえば、他のユーザーである可能性があります)。このbashセッションでいくつかのサブプロセスが作成されました。
現在、このbashセッションの前景にあるサブプロセス(ある場合)を知る方法はありますか?
答え1
オペレーティングシステムが指定されていません。私はあなたがGNUにアクセスできると仮定しますps
。
たとえば、bashセッションPIDが1857であるとします。次に、そのセッションのフォアグラウンドとバックグラウンドのプロセスを確認するには、次の手順を実行します。
$ ps -O stat --ppid 1857
PID STAT S TTY TIME COMMAND
1908 S S pts/4 00:00:00 sleep 30m
2071 S+ S pts/4 00:00:00 man ps
STAT列を見てください。この+
サフィックスはフォアグラウンドプロセスを識別します。他のプロセスはバックグラウンドプロセスです。
上記の例では、sleep 30m
シェルは背景(ステータスはプレーンS
)とman ps
フォアグラウンド(ステータスはS+
)にあります。
仕組み:
--ppid 1857
これは、
ps
出力が親PID 1857を使用するプロセスに制限されることを示します。-O stat
これは、出力に
ps
このフィールドを提供することを意味します。このフィールドのSTAT
Aは、+
プロセスが前景にあることを示します。
STATps
フィールドの詳細
man ps
ステータスフィールドの解釈方法の詳細を提供します。
プロセス状態コード以下は、s、stat、およびステータス出力指定子(タイトル「STAT」または「S」)がプロセスの状態を説明するために表示するさまざまな値です。
D uninterruptible sleep (usually IO) R running or runnable (on run queue) S interruptible sleep (waiting for an event to complete) T stopped, either by a job control signal or because it is being traced W paging (not valid since the 2.6.xx kernel) X dead (should never be seen) Z defunct ("zombie") process, terminated but not reaped by its parent For BSD formats and when the stat keyword is used, additional characters may be displayed: < high-priority (not nice to other users) N low-priority (nice to other users) L has pages locked into memory (for real-time and custom IO) s is a session leader l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do) + is in the foreground process group
興味があるのは、プロセスが前景かどうかであり、最後の項目が重要です。+
これはフォアグラウンドプロセスを意味します。
答え2
~からこれは素晴らしい答えですps
@KamilMaciorowskiが尋ねるやや関連するTmuxの質問は、あなたのバージョンがそれをサポートしていると仮定し、tpgid
前景プロセスグループをインポートするための更新された方法を提供しますprocps-ng
。
@John1024の答えと同様に、Bashプロセスのpidが1857であると仮定します。
ps -o tpgid:1= -p 1857
答え3
Ctrl+おそらくあなたに話します...プロセスを見て、子プロセスがあるかどうかを確認するためにZ使用できます。ps
もちろん、プログラムがバックグラウンドで実行されることを意図していない場合、このアプローチは機能しません。
ログインしたw
後、ps
またはを使用して、top
彼らが何をしているかを確認することもできます。