このコマンドを使用してps
実行中のすべてのバックグラウンドプロセスを一覧表示できますか、それともこのコマンドのバックグラウンドプロセスリストを取得する唯一のオプションですかjobs
?
答え1
このコマンドは通常、演算子を使用するか(たとえば)バックグラウンドジョブを開始して、現在のシェルで開始されているすべてのバックグラウンドジョブを表示しますjobs
。&
^Z bg
sleep 10 &
システムで実行されているすべてのバックグラウンドプロセスを表示するには、またはps -e
を使用ps -eF
して追加の詳細を取得できます。
コマンドが実行できる操作に関する詳細情報を取得するには、ほぼ常にrun man ps
(ps
すべてのコマンドに置き換え)を実行して、多くの情報を含むマニュアルページを取得できます。
答え2
「バックグラウンドプロセス」は、一般的に端末操作制御を指す。これは、自分が制御する端末装置の前景プロセスグループではなく、プロセスグループのプロセスです。
procps
実装されたLinuxシステムでは、次のようにps
見つけることができます。
ps -eo pid,pgid,tpgid,args | awk 'NR == 1 || ($3 != -1 && $2 != $3)'
(ターミナル前景プロセスグループID)が(ターミナルを制御するプロセス)tpgid
ではなく、そのプロセスグループIDがtpgid以外のプロセスを探す場所です。-1
これには、現在のフォアグラウンドジョブ(ターミナルフォアグラウンドで実行されている場合はパイプラインを実行するシェルを含む)を待つために忙しいシェルも含まれます。なぜなら、そのタスクはフォアグラウンドにインポートされ、定義に従ってそれ自体がバックグラウンドにあるからです。