nohupコマンドの機能は何ですか?


18

私はUbuntuの初心者です。私はコマンドを学びました

nohup [command] -走る <command>ハングアップ信号の影響を受けません

ハングアップ信号に対する免疫」の意味が理解できません。それが話している信号の種類は何ですか?そして、このコマンドの使用方法を例を挙げて教えてください。


シェルで利用可能な場合disownは、のより良い代替手段nohupです。command &またはCtrl-Zでコマンドをバックグラウンド化disownしてから、シェルからコマンドを切り離します。
ジョンクーゲルマンはモニカをサポートします

@JohnKugelman 十分ではなく、あなたも、入力、出力およびエラーストリームをそらすしています。なぜこれを自動的に行う「nohup」を使用しないのですか?
miracle173

回答:


34

geditターミナルからテキストエディターを開いて 作業しているとします。閉じる前に端末を閉じると、端末を閉じるgeditとすぐにgeditも閉じられます。ここで何が起こっているのでしょうか?geditターミナルの下の子プロセスとして実行されます。端末を閉じると、ハングアップ信号SIGHUP)がプロセスに送信され、子プロセスが強制終了されます。

一方gedit、親端末を閉じた後でも子プロセス(ここ)を実行し続けたい場合は、プロセスがハングアップ信号を受けないようにする必要があります。そのため、ターミナルを閉じても子プロセスは閉じません。nohupまさにこの仕事をします。

nohupターミナルからコマンドを切断せず、スクリプトでSIGHUPを無視し、stdout / stderrをファイルnohup.outにリダイレクトするため、ログアウト後もコマンドはバックグラウンドで実行し続けることができます。シェル/ターミナルを閉じるかログオフすると、コマンドはそのシェルの子ではなくなります。initプロセスに属します。検索pstreeすると、プロセス1(init)によって所有されていることがわかります。前景が存在しないため、前景に戻すことはできません。


16

@sourvacが書いたものに加えて、これはBack In The Dayからの遺産であり、多くの場合(オリジナルのアナログ110ボー)モデムを介してテキストのみのダム端末を介してログインします。 「。

ハングアップ信号影響を受けないpidは、ログアウトして電話を切った後も実行され続けます。これは、ジョブが何時間も何時間も実行される低速のコンピューターで非常に便利で、ログインしたままにすることはできませんでした(端末を使用する必要がある人、電話を使用する必要がある、回線の静的な接続が「bzzt」など)。


1
過去に戻っただけではありません。大規模なジョブのほとんどは、sshを実行するサーバークラスターで実行します。nohupを使用しなかった場合、ジョブが終了するのを待つ間、ラップトップをそれらのマシンに数日間接続したままにする必要があります。
レイ

@Ray "at"経由で、またはcronジョブとして実行するのはどうですか?
ロンジョン

@RonJohn確かに。またはグリッドエンジン経由。nohupが唯一の選択肢であると示唆するつもりはありませんでしたが、今日でもこの目的で使用されています。
レイ

1
たぶんあなたの歴史的な発言は正しいです。しかし、現在の重要性についてのあなたの結論は間違っています。遅いコンピューターでは役に立ちませんが、長時間実行されるジョブには役立ちます。これらは2つの異なるものです。「nohup」を使用して、端末の意図的または意図しない切断からジョブを保護します。ネットワークエラーが端末を切断し、ジョブが中止されたために、ジョブが中止されたとしても今日は不満です。
miracle173

@Ray Cronジョブは、これを達成するのにまったく不適切です。Cronjobは定期的なタスクのためのものであり、cronjobで環境を設定し、他の多くのことを考慮する必要があります。「at」の方が少し扱いやすいかもしれませんが、それでもnohupより複雑です。
miracle173
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.