bashのmanページにはこう書いてある
ジョブに関する出力(例:jobs コマンドの出力)では、現在のジョブには常に + のフラグが付けられ、前のジョブには - のフラグが付けられます。単一の %(ジョブ指定なし)も現在のジョブを参照します。
私の以下の一連の命令の後はい 2 > /dev/null &、私はジョブ[1]ではなくジョブ[2]が現在のジョブであると予想しました。
コマンドの最後にもはい 3 > /dev/null &ジョブコマンドの出力は次のようになると予想していました:
[1] 停止
[2] - 実行中
[3] + 実行中
何が足りないのでしょうか?
$ yes 1 > /dev/null
^Z
[1]+ Stopped yes 1 > /dev/null
$ jobs
[1]+ Stopped yes 1 > /dev/null
$ yes 2 > /dev/null &
[2] 3082
$ jobs
[1]+ Stopped yes 1 > /dev/null
[2]- Running yes 2 > /dev/null &
$ yes 3 > /dev/null &
[3] 3116
$ jobs
[1]+ Stopped yes 1 > /dev/null
[2] Running yes 2 > /dev/null &
[3]- Running yes 3 > /dev/null &
答え1
同じマニュアルページから:
[…] 現在のジョブ、つまりフォアグラウンドで停止されたかバックグラウンドで開始された最後のジョブ。
少し曖昧です。次のように理解できるかもしれません:
- 「フォアグラウンドで停止したジョブ、またはバックグラウンドで開始したジョブ」をすべて取得します...
- …では「最後」を選びます。
しかしそれはそれよりも:
- 「最後のジョブはフォアグラウンドで停止しました」とします。
- しかし、そのようなジョブがない場合は、「バックグラウンドで開始された最後のジョブ」を取得します。