Xubuntu 16.04でこれらの4つのコマンドをローカルまたはssh経由で実行すると、まったく同じように動作するようです。
export DISPLAY=:0.0 #not necessary unless you have logged in over ssh instead of starting a terminal locally
gedit &
gedit & disown
Nohup gedit
Nohup gedit & disown
gedit &
とgedit & disown
の違いはわかりません。親ターミナルを強制終了したり、sshセッションからログアウトしたりすると、どちらのシナリオでもgeditが「取り消された」ように見えるためです。
2つと3つについては、唯一の違いは、コマンド出力が別のファイルに記録され、bgプロセスを生成した元のシェルセッションが強制終了されても、その別のログに引き続き記録されることです。
3つと4つについては、技術的な違いがあることを読み続けていますが、なぜどちらを優先するのか、まったく理解できません。
どちらを使用する必要がありますか?チュートリアルとQ&Aで使用される4つのコマンドすべてを見てきましたが、Nohupとdisownの技術的な違いを説明する非常に優れた回答にもかかわらず、明確な推奨を得ることができません(おそらく、ログ記録の目的またはシェルの互換性を除いて)使用する必要があります。
long timeで実行されるスクリプトを実行する必要があり、ssh
セッションにいるときは、次のいずれかが必要です。
ネットワークが切断されたとき、またはラップトップを梱包して離れたときでも、タスクは続行されます。
a。タスクは私からのインタラクティブな入力なしで終了できます。
Nohup do_my_stuff &
b。このタスクには、標準入力で私からの何かが必要になる場合があります。
man tmux
history -w
tmux
do_my_stuff
バックグラウンドプロセスは私の現在のセッションを何らかの形で強化しており、セッションと共に終了するはずです。珍しい。
enhance_my_session >>/tmp/enhance.$$.log 2>&1 &
私のsshセッションでいくつかのログをランダムに吐き出してほしい。待って、何?いいえ、私はそれを望みません。ありがとうdisown
。
もう1つ必要なことは、プロセスを完全に切り離されたデーモンに変換することですが、次回の起動時に自動的に開始しないようにします。システムがいつ再起動するか、誰が再起動するかは予測できないので、私はそれを望みません。
通常、私は次のようにします。
myprog &
現在のログインシェルからバックグラウンドで何かを実行したいだけの場合。これは私にとって99%の時間で十分です...
Nohup myprog > /my/path/output.txt &
シェルから何かを開始したが、後でログアウトしたい場合(おそらくバックグラウンドタスクがまだ実行中の場合)。
シェルの終了とターミナルの中止を区別する必要があります。
一般に、(ユーザーレベルでの)最良の解決策はscreen
です。
タスクがユーザー関連ではなくシステム関連である場合は、代わりに手動で開始するsystemdサービスにすることができます。