ジョブを停止せずにバックグラウンドに送信するにはどうすればよいでしょうか?

ジョブを停止せずにバックグラウンドに送信するにはどうすればよいでしょうか?

Ctrl+z は現在のジョブをバックグラウンドに送信しますが、停止します。

停止したジョブを再開するにはどうすればよいでしょうか?

答え1

「bg」を実行するとバックグラウンドで実行できます。

「fg」はフォアグラウンドに移動します

bg と fg は PID ではなくジョブ番号を取得することに注意してください。複数のジョブを同時に実行している場合は、「jobs」コマンドを使用してジョブ番号を取得します。

答え2

コマンドラインで「&」を使用して、プログラムをバックグラウンドジョブとして開始することもできます。

例えば

マイプログラム &

出力 (stdout と stderr の両方) は引き続き現在の tty に送信されることに注意してください。そのため、通常は次のように /dev/null またはログ ファイルにリダイレクトすることをお勧めします。

myprogram > ~/program.log 2>&1 &

どちらの例でも、他のジョブと同様にバックグラウンド ジョブなので、'fg' を使用してフォアグラウンドに戻すことができます (ただし、出力をリダイレクトしている場合は、あまり表示されません)。

答え3

bash では、「bg」を入力すると、入力が必要になるまでジョブがバックグラウンドになります。STDERR と STDOUT への出力は継続されますが、役に立たない可能性があります。ジョブをフォアグラウンドに戻すには、「fg」と入力します。

[adjuster@mx02 ~]$ cp ~/crap/* ~/crap2 
(Ctrl-Z)
[1]+  Stopped                cp ~/crap ~/crap2 

[adjuster@mx02 ~]$ cp ~/crap3/* ~/crap4
(Ctrl-Z)
[2]+  Stopped                cp ~/crap3/* ~/crap

[adjuster@mx02 ~]$ jobs
[1]+  Stopped                cp ~/crap ~/crap2 
[2]+  Stopped                cp ~/crap3/* ~/crap

[adjuster@mx02 ~]$ bg 1
[1]- cp ~/crap ~/crap2 &
[1]-  Exit 1                  cp ~/crap ~/crap2 

[adjuster@mx02 ~]$ fg 2
[adjuster@mx02 ~]$ 

つまり、長いコピー ジョブを開始して一時停止し、2 番目の長いコピー ジョブを開始して一時停止し、最初のコピー ジョブをバックグラウンドに置いて実行し、その後最初のコピー ジョブを終了しました。その後、最後のコピー ジョブをフォアグラウンドに置いて終了させました。

答え4

もう一つの選択肢は優れた画面ユーティリティを使用すると、ターミナルを開いたままにせずに、同時に複数のプロセスを実行できます。また、bg や fg よりもはるかに簡単に対話できます。

関連情報