Linux オペレーティング システムの神秘的な世界、つまりバックグラウンド実行を探索してみましょう。日常的な使用では、現在の作業に影響を与えずにタスクをバックグラウンドでサイレントに実行させるために、バックグラウンド実行を使用する必要があることがよくあります。では、Linux でバックグラウンド操作を実装するにはどうすればよいでしょうか?
######考える######まず第一に、質問を検討する必要があります。なぜ端末を直接閉じるとバックグラウンド プログラムが終了するのでしょうか? それは、端末を直接閉じると、端末が SIGHUP シグナルを開始したバックグラウンド タスクに送信するためです。現在の環境が不安定になり、実行中のプログラムがハングアップする場合は、SIGHUP を無視してください。
nohup最も一般的に使用されるコマンドは [nohup] です。名前から、実行中のコマンドを一時停止しても、ターミナルを閉じても、アカウントからログアウトしても、プロセスは実行を継続することがわかります。 [&]記号と一緒に使用されます。 使用法: nohup コマンド [ Arg … ] [ & ]
rree上記からわかるように、実行している test.sh の親プロセスは [PID 1] となり、Linux のメインプロセスに引き継がれます。
setsid
nohup は SIGHUP シグナルを無視することを意味します。他にアイデアはありますか? setip コマンドは、セッションを再度開き、親プロセス グループの ID を継承し、親プロセスの制御をエスケープできます。下の図からわかるように、test.sh スクリプトの親プロセスはすでに init 1 になっています。この時点では、ターミナルを閉じるか終了するかに関係なく、バックグラウンド プログラムとは何の関係もありません。
リーリー setsid と nohup のもう 1 つの違いは、& 背景記号を使用する必要がないことです。######出口######
exit コマンドを使用してターミナルを終了しても、プログラムは引き続き実行されます。これはなぜですか?これは、exit コマンドを使用して端末を終了するときに、端末が属するタスクに SIGHUP シグナルが送信されないためです。これは huponexit 構成項目によって制御されます。デフォルトはオフです。shopt を使用できます。それを表示するコマンド。
rree huponexit をオンに設定し、exit コマンドを再度使用して終了すると、対応するタスクもそれに応じて終了します。 リーリー ######トラップ######
トラップ コマンドは Linux の組み込みコマンドです。指定されたシグナルを受信したときに実行されるアクションと、その後に処理されるシグナルの名前が続きます。一般的なシグナルは次のとおりです:
スクリプトがバックグラウンドに移行し、ターミナルが終了してプログラムを閉じたくない場合は、スクリプトにトラップ コマンドを追加して、SIGHUP シグナルを無視する (プロセスをハングする) ことができます。
リーリー Linux screen コマンドは、複数のウィンドウ管理プログラムに使用され、ターミナルを作成し、その中でプログラムを実行できます。rree
この例からわかるように、テスト スクリプトの親プロセスはスクリーン ターミナル プロセスであり、スクリーン ターミナルの親プロセスである PID1 もバックグラウンド プロセスの実行を完了しています。つまり、バックグラウンドでの実行は、Linux では非常に一般的で実用的なテクニックです。サーバー側でバックグラウンド サービスを実行する場合でも、パーソナル コンピューターで長時間実行されるタスクを完了する場合でも、バックグラウンド操作は効率を向上させ、日常業務を容易にするのに役立ちます。
以上がLinux のバックグラウンド操作の神秘的な世界を探索するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。