ps
コマンドまたはでプロセスがバックグラウンドで実行されているかフォアグラウンドで実行されているかを知るにはどうすればよいですかps -ef
?
と入力するとps -ef
、TTY というセクションがあると思いました。TTY のリストを確認すると、ほとんどが です?
。この疑問符は、バックグラウンドで実行されているプロセスを意味するのでしょうか。
私が正しいかどうか確認したいです。そうでない場合、プロセスがバックグラウンドで実行されているかフォアグラウンドで実行されているかを確認する方法を知りたいです。
ps. コマンドはjobs
ここでは使用されません。
答え1
フィールドstat
+
フォアグラウンドプロセス用の追加機能がある:
ps -e -o pid,tty,stat,cmd
フォアグラウンド プロセスとは、プロセス グループ ID ( pgid
) がターミナル ( tpgid
) 上のフォアグラウンド プロセスであるプロセスです。
ps -e -o pid,pgid,tpgid,tty,cmd | awk '$2==$3'
TTYのリストを見ると、ほとんどが「?」(疑問符)です。その疑問符はバックグラウンドで実行されているプロセスを意味するのでしょうか?
いいえ、それは制御端末(デーモンやカーネルスレッド、フォアグラウンドでもバックグラウンドでもない)がないことを意味します。背景プロセス:
ps -e -o pid,pgid,tpgid,tty,cmd | awk '$3!=-1 && $2!=$3'
答え2
OP は、「プロセスがバックグラウンドで実行されているかフォアグラウンドで実行されているかをどのように知ることができますか?」と質問しました。
前景と背景の状態プロセスps
として報告されている州プロセスの。man ps
これらをリストしますプロセス状態の見出しの下にPROCESS STATE CODE
。
ps -ef
プロセスの状態を報告しませんが、セクションを参照すると、引数は1つ以上の出力を指定するために使用できることがman ps
わかります。OUTPUT FORMAT CONTROL
-o
ps
キーワード。 これらキーワードセクションにリストされておりSTANDARD FORMAT SPECIFIERS
、並外れた粘り強さで、最終的にs
、、キーワードstat
がstate
リストされていることに気づくでしょう。しかし、これら3つすべてがキーワード提供します州出力では、stat
キーワードをお伝えしますmulti-character process state
!要点:ps
勤勉なユーザーに有利。
例えば、次のps
コマンドは、ピッド、州、 そしてその指示プロセスを開始したキーワード pid
、stat
そしてcommand
:
ps -eo pid,stat,command
これがどのように機能するかを確認するには、次の例を検討してください。
1 つのターミナルで、次のコマンドを実行します。
ping 8.8.8.8 > /dev/null
別の端末で:
ps -eo pid,stat,command | grep ping | grep -v grep
12518 S+ ping 8.8.8.8
それは私たちに次のことを伝えます:
- PIDは
12518
- プロセス州(
S+
キーワード経由)stat
command
このプロセスを生み出したのはping 8.8.8.8
このプロセスがフォアグラウンドかバックグラウンドかを知るには、もう1つのステップが必要です。州の値S+
は解読されたman ps
の見出しの下にはPROCESS STATE CODE
、次のことが書かれています。
S 割り込み可能スリープ(イベントの完了を待機中)
+フォアグラウンドプロセスグループ内
+
その結果、 2番目の文字の位置から、このプロセスが実行中であることがわかります。前景バックグラウンドプロセスは、最初の文字位置に が記述されS
、2 番目の文字位置には何も記述されない場合があります。バックグラウンドプロセスを示す文字の組み合わせは他にもいくつかあります。これリストについては。
ちなみに:これは、私の Debian ベースのシステム (バージョン として報告されていますps from procps-ng 3.3.15
) と、macOS 10.15 (BSD バージョンの から派生ps
) で動作します。