1. デーモンプロセスとは
デーモンは、ターミナルとは別個のバックグラウンドで実行されるプロセスです。デーモンプロセスは端末から分離されているため、プロセス実行中の情報が端末に表示されることはなく、端末が生成する端末情報によってプロセスが中断されることはありません。
たとえば、Apache、nginx、mysqlはすべてデーモンプロセスです
2. デーモンを開発する理由
多くのプログラムはサービスの形式で存在しており、ターミナルや UI との対話はありません。TCP/UDP ソケット、UNIX ソケット、fifo など、他の方法で他のプログラムと対話する場合があります。プログラムが開始されると、条件が満たされるまでバックグラウンドでタスクの処理を開始します。
3. アプリケーション開発にデーモンプロセスを使用する場合
現在のニーズを例に挙げると、プログラムを実行し、特定のポートをリッスンし、サーバーによって開始されたデータを受信し続け、データを分析して処理し、結果を使用するデータベースに書き込む必要があります。 ZeroMQ はデータの送受信を実装します。
このプログラムの開発にデーモン プロセスを使用しない場合、プログラムが実行されると、現在の端末ウィンドウ フレームが占有され、現在の端末キーボード入力の影響も受けて、プログラムが誤って終了する可能性があります。
4. デーモンプロセスのセキュリティ問題
プログラムが非スーパーユーザーとして実行されることを期待しています。これにより、プログラムが脆弱性によりハッカーによって制御された場合、攻撃者は実行権限を継承することのみが可能で、スーパーユーザー権限を取得できなくなります。
プログラムが実行できるインスタンスは 1 つだけであることを望みます。3 つ以上のプログラムを実行しないと、ポートの競合やその他の問題が発生します。
5. デーモンプロセスの開発方法
例1. デーモンプロセスの例
5.1. プログラムの起動
以下はプログラム開始後にバックグラウンドに入るコードです
現在のプロセスのステータスはプロセス ID ファイルによって決定されます。プロセス ID ファイルが存在する場合、コード file_exists($this->pidfile) によって実装されるプログラムが実行中であることを意味しますが、その後プロセスは強制終了されます。ファイルは実行する前に手動で削除する必要があります
プログラムの開始後、親プロセスが起動され、子プロセスがバックグラウンドで実行され、子プロセスの権限が root から指定されたユーザーに切り替えられ、pid がプロセス ID ファイルに書き込まれます。
5.2. プログラムの停止
プログラムは停止し、pid ファイルを読み取り、posix_kill($pid, 9) を呼び出し、最後にファイルを削除します。
非常に高度な技術者が参加します。 Java では非常に多くのことができるからです。
http://www.bkjia.com/PHPjc/873340.html