コマンドまたはプロセスがバックグラウンドで実行されているのか、フォアグラウンド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のリストを見ると、ほとんど「?」(疑問符)なのですが、疑問符がバックグラウンドで実行されているという意味なのか気になります。
いいえ、これはtty(フォアグラウンドまたはバックグラウンドのデーモンまたはカーネルスレッド)を制御しないことを意味します。次のリストの場合背景プロセス:
ps -e -o pid,pgid,tpgid,tty,cmd | awk '$3!=-1 && $2!=$3'
答え2
OPが質問しました。 「...プロセスがバックグラウンドで実行されているのか、フォアグラウンドで実行されているのか、どうすればわかりますか?」
前景と背景の状態プロセスps
次のように報告された状態のコース。man ps
これらをリストしてみてくださいプロセス状態タイトルの下にPROCESS STATE CODE
。
ps -ef
プロセスのステータスは報告されませんが、見つかったman ps
セクションを参照すると、パラメータを使用して1つ以上の出力を指定できます。OUTPUT FORMAT CONTROL
-o
ps
キーワード。これらキーワードSTANDARD FORMAT SPECIFIERS
セクションに記載されている、格別な忍耐で、人々は最終的に記載されている、とs
キーワードstat
をstate
見つけるでしょう。しかし、これら3つを参考にしてください。キーワード提供される状態出力には次の内容のみがあります。stat
キーワード私を与えるmulti-character process state
!キーポイント:ps
勤勉なユーザーに最適。
例えば、次のps
コマンドが出力されます。PID、これ状態、しかも注文する次のコマンドを使用してプロセスを開始します。キーワード pid
、stat
そしてcommand
:
ps -eo pid,stat,command
これがどのように機能するかを理解するには、次の例を検討してください。
端末で次のコマンドを実行します。
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
)で動作します。