私はUbuntuの初心者です。私はコマンドを学びました
nohup [command]
-走る <command>
ハングアップ信号の影響を受けません
「ハングアップ信号に対する免疫」の意味が理解できません。それが話している信号の種類は何ですか?そして、このコマンドの使用方法を例を挙げて教えてください。
私はUbuntuの初心者です。私はコマンドを学びました
nohup [command]
-走る <command>
ハングアップ信号の影響を受けません
「ハングアップ信号に対する免疫」の意味が理解できません。それが話している信号の種類は何ですか?そして、このコマンドの使用方法を例を挙げて教えてください。
回答:
gedit
ターミナルからテキストエディターを開いて 作業しているとします。閉じる前に端末を閉じると、端末を閉じるgedit
とすぐにgeditも閉じられます。ここで何が起こっているのでしょうか?gedit
ターミナルの下の子プロセスとして実行されます。端末を閉じると、ハングアップ信号(SIGHUP
)がプロセスに送信され、子プロセスが強制終了されます。
一方gedit
、親端末を閉じた後でも子プロセス(ここ)を実行し続けたい場合は、プロセスがハングアップ信号を受けないようにする必要があります。そのため、ターミナルを閉じても子プロセスは閉じません。nohup
まさにこの仕事をします。
nohup
ターミナルからコマンドを切断せず、スクリプトでSIGHUPを無視し、stdout / stderrをファイルnohup.outにリダイレクトするため、ログアウト後もコマンドはバックグラウンドで実行し続けることができます。シェル/ターミナルを閉じるかログオフすると、コマンドはそのシェルの子ではなくなります。initプロセスに属します。検索pstree
すると、プロセス1(init)によって所有されていることがわかります。前景が存在しないため、前景に戻すことはできません。
@sourvacが書いたものに加えて、これはBack In The Dayからの遺産であり、多くの場合(オリジナルのアナログ110ボー)モデムを介してテキストのみのダム端末を介してログインします。 「。
ハングアップ信号の影響を受けないpidは、ログアウトして電話を切った後も実行され続けます。これは、ジョブが何時間も何時間も実行される低速のコンピューターで非常に便利で、ログインしたままにすることはできませんでした(端末を使用する必要がある人、電話を使用する必要がある、回線の静的な接続が「bzzt」など)。
disown
は、のより良い代替手段nohup
です。command &
またはCtrl-Z
でコマンドをバックグラウンド化disown
してから、シェルからコマンドを切り離します。