Linux シェルから git を使用してリモート サーバーにファイルをアップロードするコマンドがありますが、完了するまでに何時間もかかります。
実行中のプログラムをバックグラウンドに置くにはどうしたらいいでしょうか? そうすれば、シェルで作業を続けながら、そのプロセスも完了させることができますか?
ベストアンサー1
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 はすぐに有効になり、保留中の出力と先行入力が破棄されるという追加の副作用があります。背景 [ジョブスペック...]
中断された各ジョブを再開するジョブスペックバックグラウンドで、&で開始されたかのように動作します。ジョブスペック存在しない場合、シェルの今の仕事使用されている。
編集
ターミナルを終了しても実行を継続できるプロセスを開始するには
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