128

Linuxシェルからリモートサーバーにgitを使用してファイルをアップロードするコマンドがあり、完了するまでに何時間もかかります。

その実行中のプログラムをバックグラウンドに置くにはどうすればよいですか?シェルで作業でき、そのプロセスも完了するようにするには?

4

1 に答える 1

236

CTRL + Zでプロセスを一時停止してから、コマンドを使用しbgてバックグラウンドでプロセスを再開します。例えば:

sleep 60
^Z  #Suspend character shown after hitting CTRL+Z
[1]+  Stopped  sleep 60  #Message showing stopped process info
bg  #Resume current job (last job stopped)

マニュアルページbgのジョブ制御と使用法の詳細:bash

ジョブ制御プロセスの実行中にサスペンド
文字(通常は^ Z、Control-Z)を 入力すると、そのプロセスが停止し、制御がbashに戻ります。[...]次に、ユーザーはbgコマンドを使用してこのジョブの状態を操作し、バックグラウンドで続行できます[...]。^ Zはすぐに有効になり、保留中の出力と先行入力が破棄されるという追加の副作用があります。

bg [ jobspec ...]
中断された各ジョブjobspecを、&で開始されたかのようにバックグラウンドで再開します。jobspecが存在しない場合 、現在のジョブのシェルの概念が使用されます。

編集

ターミナルを強制終了しても実行を継続できるプロセスを開始するには

nohup [command] [-args] > [filename] 2>&1 &

例えば

nohup /home/edheal/myprog -arg1 -arg2 > /home/edheal/output.txt 2>&1 &

出力を無視するには(あまり賢明ではありません)、ファイル名を次のように変更します/dev/null

エラーメッセージを別のファイルに設定するには、&1をファイル名に変更します。

さらに、このjobsコマンドを使用して、これらのバックグラウンド処理されたプロセスの索引付きリストを表示できます。また、実行するkill %1kill %2、プロセスのインデックスである番号を使用して、バックグラウンドプロセスを強制終了できます。

于 2012-12-03T03:47:53.437 に答える