バックグラウンドで2つのプロセスを開始し、2番目のタスクをフォアグラウンドにインポートするにはどうすればよいですか?

バックグラウンドで2つのプロセスを開始し、2番目のタスクをフォアグラウンドにインポートするにはどうすればよいですか?

これら2つのプロセスは次のとおりです。

cat /dev/tty > /dev/null &
cat /dev/zero > /dev/null &

バックグラウンドで実行する必要がありますが、2番目のタスクをフォアグラウンドにインポートすることはできません。

ベストアンサー1

これが2つの一般的なジョブの場合、aa plainはfg2番目のジョブをフォアグラウンドにインポートします(これが最近一時停止されたバックグラウンドジョブ、または最近開始されたバックグラウンドジョブの場合(他のジョブは一時停止されません))。

ただし、最初の操作(読み取り)の性質により、/dev/ttyTTYで読み取りを試みるとすぐに停止します。fgしたがって、それはなりますそれフロントデスクに戻ります。

他の仕事がないことを考えると、ここで解決策は%-orを使用することです。%2


ジョブがバックグラウンドに切り替わると(終了コマンドを使用してジョブを開始するか、フォアグラウンドジョブの一時停止を使用してコマンドを&実行Ctrl+Zして)、ジョブbgに「ジョブID」または「ジョブ仕様」が表示されます。このジョブIDは通常、小数点以下の桁数%Nで表されます。N

waitなどの複数のコマンドでジョブIDを使用できますkill。たとえば、このコマンドは、ジョブIDを使用してバックグラウンドジョブにシグナルを送信するために使用できます。fgbgkill

デフォルトでは、このfgコマンドは「現在の操作」に適用されます。現在のジョブのジョブIDは、または%+で取得できます%%。現在のジョブは、直前に開始されたバックグラウンドジョブ、または中断されたジョブがある場合は、最新の中断されたジョブです。

バックグラウンドジョブをフォアグラウンドに移動するには、対応するジョブIDを使用してください。

$ sleep 1000 &
[1] 37327
$ sleep 500 &
[2] 83532
$ jobs
[1]-  Running                 sleep 1000 &
[2]+  Running                 sleep 500 &
$ fg %1
sleep 1000

出力+jobs「現在の作業」を意味します(簡単な呼び出しに切り替えた作業ですfg)。

POSIX標準特殊ジョブID:

  • %%、現在の職業。
  • %+、のような上記と。
  • %-、以前の職業。
  • %N、ジョブ番号N
  • %string、コマンドがで始まるタスクstring
  • %?string、コマンドに含まれる操作ですstring

おすすめ記事