Bashで、どのプロセスが前景にあるかを調べます。

Bashで、どのプロセスが前景にあるかを調べます。

私は開いている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このフィールドを提供することを意味します。このフィールドのSTATAは、+プロセスが前景にあることを示します。

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彼らが何をしているかを確認することもできます。

関連情報