Linux では、デーモン プロセスは「elf プロセス」とも呼ばれます。これはバックグラウンドで実行され、端末によって制御されない特別なプロセスです。特定のシステム タスクを実行するために使用されます。デーモン プロセスは制御端末から独立しており、特定のイベントが発生すると定期的に実行します。
#このチュートリアルの動作環境: linux5.9.8 システム、Dell G3 コンピューター。
デーモンプロセスの定義
デーモンプロセスはデーモンプロセス(Daemon)とも呼ばれ、バックグラウンドで動作するプロセスです。特定のシステム タスクを実行するために使用される特別なプロセス。多くのデーモンはシステムの起動時に開始され、システムがシャットダウンされるまで実行されます。必要な場合にのみ開始され、タスクが完了すると自動的に終了するものもあります。
これは制御端末から独立しており、発生する特定のイベントを定期的に実行します。デーモンは非常に便利なプロセスです。ほとんどの Linux サーバーはデーモン プロセスを使用して実装されています。
Linux システムが起動すると、多くのシステム サービス プロセスが起動されますが、これらのシステム サービス プロセスには制御端末がなく、ユーザーと直接対話することはできません。他のプロセスは、ユーザーのログインまたはプログラムの実行時に作成され、操作の終了またはユーザーのログアウト時に終了しますが、システム サービス プロセス (デーモン プロセス) はユーザーのログインおよびログアウトの影響を受けず、常に実行されます。ランニング。この種のプロセスにはデーモンと呼ばれる名前が付いています。
ps axj コマンドを使用して、システム内のプロセスを表示しましょう。パラメータ a は、現在のユーザーのプロセスだけでなく、他のすべてのユーザーのプロセスも示します。パラメータ x は、制御端末のあるプロセスだけでなく、制御端末のないすべてのプロセスも示します。パラメータ j は、リストを示します。およびジョブ制御関連情報。
(1) TPGID 列に -1 があるものは、端末を制御しないプロセス、つまりデーモン プロセスです。 2) COMMAND 列の [ ] で囲まれた名前はカーネル スレッドを表します。これらのスレッドはカーネル内で作成され、ユーザー空間コードがないため、プログラム ファイル名やコマンド ラインはありません。k で始まる名前は通常、次の目的で使用されます。カーネルを表します;
(3) init プロセスについてはすでによく理解しています。udevd は /dev ディレクトリ内のデバイス ファイルを維持する責任を負い、acpid は電源管理を担当し、syslogd は以下のログ ファイルを維持する責任を負います。 /var/log;
(4) デーモン プロセスの名前は通常、デーモンを意味する d で終わることに注意してください。
デーモンプロセスの特徴(1) Linuxでは、各システムがユーザーと通信するためのインターフェースがターミナルとなり、このターミナルから実行されるすべてのプロセスがアタッチされます。この端末に対して、この端末をこれらのプロセスの制御端末と呼びます;
(2) 制御端末が閉じられると、対応するプロセスは自動的に閉じられます。しかし、デーモン プロセスはこの制限を突破することができ、ターミナルから切り離されてバックグラウンドで実行されます (ターミナルから切り離される目的は、プロセス実行中の情報がターミナルに表示されないようにするためです。
は、どの端末によっても生成されません。端末情報によって中断されます)、実行されると実行を開始し、システム全体がシャットダウンされるまで終了しません (もちろん、対応するデーモン プロセスを強制終了すると考えることもできます)。(3) プロセスがユーザーや中断、その他の変更の影響を受けない場合は、プロセスをデーモン プロセスに変える必要があります。
プロセス、プロセス グループ、セッション、および制御端末の間の関係デーモン プロセスの作成にはこれらの環境パラメーターを変更する必要があるため、理解しておくことが非常に重要です。重要:
デーモン プロセスの作成デーモン プロセスを作成する際の最も重要な手順は、setsid 関数を呼び出して次のことを行うことです。新しいセッション リーダーを作成します。
#includepid_t setid(void);//该函数调用成功时返回新创建的Session的id(其实也就是当前进程的id),出错返回-1。
この関数を呼び出す前に、現在のプロセスはプロセス グループのリーダーになることが許可されていないことに注意してください。そうでない場合、関数は -1 を返します。また、現在のプロセスがプロセス グループのリーダーではないことを確認するのも簡単で、最初に fork してから setsid を呼び出すだけです。フォークによって作成された子プロセスは、親プロセスと同じプロセス グループにあります。プロセス グループのリーダーはグループの最初のプロセスである必要があるため、子プロセスをグループの最初のプロセスにすることはできません。子プロセスですので問題ありません。
この関数を正常に呼び出した結果は次のようになります:
(1) 新しいセッションを作成します。現在のプロセスがセッション リーダーで、現在のプロセスの ID がセッション ID です。
(2) 新しいプロセス グループを作成します。現在のプロセスはプロセス グループのリーダーであり、現在のプロセスの ID はプロセス グループの ID です。
(3) 現在のプロセスの ID はプロセス グループの ID です。プロセスは元々制御端子を持っていますが、この端子を失い、制御端子を持たないプロセスとなります。 (いわゆる制御端末の紛失とは、元の制御端末がまだ開いていて読み書きできるが、それは制御端末ではなく、単に通常の開いているファイルであることを意味します)。
デーモン プロセスを強制終了する方法
1. まず ps axj | grep デーモン名
を実行して、対応するデーモンを見つけますプロセスを実行し、kill -9 デーモン プロセス名
を使用して kill;
2. ps -ef
コマンドを使用して、対応するデーモン プロセスを検索し、次を使用します。 kill -9
コマンドで強制終了;
3. プロセスの起動、シャットダウン、再起動を自動的に管理するシェル スクリプトを作成します。
関連する推奨事項: 「Linux ビデオ チュートリアル 」
以上がLinuxデーモンとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。