web-dev-qa-db-ja.com

ジョブを停止せずにバックグラウンドに送信する方法は?

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

そして、停止したジョブを再開する方法は?

10
Jader Dias

「bg」を実行して、バックグラウンドで実行できます。

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

BgとfgはPIDではなくジョブ#sをとるため、一度に複数のジョブを実行している場合は、「jobs」コマンドを使用してジョブ番号を取得します。

17
Matt Simmons

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

例えば.

 myprogram&

出力(stdoutとstderrの両方)は引き続き現在のttyに送られるため、通常は/ dev/nullまたはログファイルにリダイレクトすることをお勧めします。

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

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

8
cas

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番目の長いコピージョブを開始して一時停止し、最初のコピージョブをバックグラウンドに配置して実行し、その後、最初のコピージョブを終了しました。次に、最後のコピージョブをフォアグラウンドに配置して終了させます。

5
Evan Anderson

Nohup task.sh&

バックグラウンドで実行され、出力は現在のディレクトリのNohup.outに送られます。ログアウトしても実行を続けます。

4
Craig

別のオプションは、優れた screen ユーティリティです。これは、ターミナルを開いたままにせずに、同時に多くのプロセスを実行するために使用できます。また、bgやfgよりもはるかに簡単な対話性を実現します。

2
Hay