現在実行中のLinuxプロセスをバックグラウンドで配置するにはどうすればよいですか?[閉まっている]


111

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

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


推測だけですが、ctrl + zを試すか、次のようにコマンドを実行しましたか。#command&
EralpB

コマンドはすでに実行されているため、他のオプションはありません。どのコマンドを試すかわかりません。現在のプロセスを壊したくなかったので、実験しませんでした
Mirage

その場合は、より専門的な回答を待つ必要があります。(コマンドとこと)
EralpB

:この質問に受け入れられた回答が取られる必要がある三つのステップを説明しstackoverflow.com/questions/625409/...
レナードSaers

puttyの2番目のインスタンスを開いてサーバーに再度接続し、別のシェルを取得することもできます。との解決策ctrl+zは素晴らしいですが。
Ela782

回答:


207

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

JOB CONTROL
型付けが中断文字(通常は^ Z、コントロール-Z)プロセスは、プロセスが停止するとリターンがbashのにコントロールすることの原因を実行している間。[...]ユーザーは、bgコマンドを使用してこのジョブの状態を操作し、バックグラウンドで続行できます[...]。^ Zはすぐに有効になり、保留中の出力と先行入力が破棄されるという副次的な影響があります。

bg [ 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、その番号をプロセスのインデックスとして、強制終了できます。


私はそれを試しましたが、何かを出力しているので、アップロードされたデータ量を示す%で再びフォアグラウンドに到達します
Mirage

開始時にプロセスに指示したとおり、プロセスは出力を端末に書き込みます。出力をファイルまたはに書き込むには、再起動する必要があります/dev/null。上記の編集を参照してください。
Ed Heal

つまり、プロセスがすでに開始されている場合、出力をリダイレクトする方法はありません
Mirage

はい、そうです。プロセスを実行しているシェルだけに影響を与えることはできません。a kill -9 <pid of your shellを実行すると、プロセスは引き続き実行され、出力は破棄されますが、新しいシェルを開始するには再度ログインする必要があります。
Ed Heal

disown端末セッションからログアウトする必要があり、実行を継続したい場合にも、このコマンドを使用できます。
Kirer Roerig
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.