1. ホーム
  2. linux

[解決済み] 現在実行中のLinuxプロセスをバックグラウンドにする方法は?[クローズド]

2022-07-19 23:18:19

質問

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はすぐに有効になり、保留中の出力とtypeaheadを破棄させるという副次的な効果もあります。

bg [ ジョブスペック ...]

中断した各ジョブを再開する ジョブ仕様 を、あたかも & で開始したかのようにバックグラウンドで再開します。もし jobspec が存在しない場合、シェルの概念である 現在のジョブ が使われます。

EDIT

端末を強制終了しても動作が継続するようなプロセスを起動するには

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 で、数値はプロセスのインデックスを表します。