バックグラウンドでタスクを実行するにはどうすればいいですか?

バックグラウンドでタスクを実行するにはどうすればいいですか?

ターミナルから開始されたタスクまたはスクリプトをバックグラウンドで実行することは可能ですか?

答え1

ここでは、何を望んでいるかに応じて複数の答えがあります (この答えは およびbashシェルで有効ですzshが、他の答えは異なる場合があります)。

コマンドをバックグラウンドで実行する必要があり、実行前にそれがわかっている場合は、&コマンドの最後に を追加するだけです (sleep 60例のコマンドとして、 、1 分間何もしない を使用します)。

[romano:~] % sleep 60 &
[1] 9054
1& [romano:~] %

ctrlすでに実行している場合は、 -で停止できますZ。シェルがプロンプトを表示したら、次のコマンドでバックグラウンドにすることができますbg

1& [romano:~] % sleep 60  
^Z
[1]  + 9084 suspended  sleep 60
1z [romano:~] 20 % bg
[1]  + 9084 continued  sleep 60
1& [romano:~] % 

どちらの場合も、プロセス/ジョブは端末に接続されたままです。端末を閉じると、電話を切る(HUP) シグナルがプロセスに送信されると、ほとんどのプロセスは正常に終了します。プロセスが継続することを確実にする必要がある場合は、次のいずれかの方法でプロセスを開始できます。

nohup sleep 60 & 

bgまたは、単純な または を使用してバックグラウンドに送信した後、&次のようにシェルにそれを忘れるように指示します。

disown %% 

%%ジョブ制御ショートカット、ここではバックグラウンドで送信された最後のプロセスを表します。

次に、プロセスの出力を考慮する必要があります --- 最初の 2 つのケースでは、出力はターミナルに到着します。 の場合は、nohupというファイルに転送されnohup.out、後者のケース ( の場合disown) では、ターミナルを閉じない限り、ターミナルに送信されます。ターミナルを閉じた場合の動作はまったく未定義です。 バックグラウンドプロセスの出力を自分で管理するには、次の方法を使用することをお勧めします。リダイレクション

答え2

&コマンドに追加します。

例:

$ cp FromA ToB &

答え3

この例では、バックグラウンドで更新を実行します。

sudo apt-get dist-upgrade -y &

単一の & に注意してください。stdout
を非表示にする場合は、次のようにします。

sudo apt-get dist-upgrade -y > /dev/null &

答え4

さらに高度な設定が必要で、後でローカルまたは SSH でセッションを使用できるようにしたい場合は、screen を使用できます。

# screen
# apt-get update -y

次にCTRL+ を押しA、続いて を押しますD

後で再接続できます:

# screen -rd

関連情報