Linuxシェルからリモートサーバーにgitを使用してファイルをアップロードするコマンドがあり、完了するまでに何時間もかかります。
その実行中のプログラムをバックグラウンドに置くにはどうすればよいですか?シェルで作業でき、そのプロセスも完了するようにするには?
Linuxシェルからリモートサーバーにgitを使用してファイルをアップロードするコマンドがあり、完了するまでに何時間もかかります。
その実行中のプログラムをバックグラウンドに置くにはどうすればよいですか?シェルで作業でき、そのプロセスも完了するようにするには?
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 %1
かkill %2
、プロセスのインデックスである番号を使用して、バックグラウンドプロセスを強制終了できます。