ホームページ バックエンド開発 PHPチュートリアル PHPにおけるデーモンプロセスの一般的な実装方法を詳しく解説

PHPにおけるデーモンプロセスの一般的な実装方法を詳しく解説

Sep 09, 2017 pm 03:02 PM
php 一般 プロセス

この記事では、PHP デーモン プロセスの 2 つの一般的な実装方法を主に紹介し、PHP デーモン プロセスの原理、関連する実装方法、および運用上の注意事項を具体的な例の形式で分析します。 PHP の説明 デーモン プロセスには 2 つの一般的な実装があります。参考のために皆さんと共有してください。詳細は次のとおりです:

最初の方法は、nohup と & を一緒に使用することです。 コマンドの後にアンパサンドを追加すると、コンソールを占有することなく、開始されたプロセスをバックグラウンドで実行できます。 ここでは、while 無限ループを使用して説明します。

<?php
while(true){
    echo time().PHP_EOL;
    sleep(3);
}
ログイン後にコピー

& メソッドを使用してプロセスを開始します

[root@localhost php]# php deadloop.php &
[1] 3454
[root@localhost php]# ps aux | grep 3454
root   3454 0.0 0.8 284544 8452 pts/0  T  18:06  0:00 php deadloop.php
root   3456 0.0 0.0 103316  896 pts/0  S+  18:08  0:00 grep 3454
[1]+ Stopped         php deadloop.php
[root@localhost php]#
ログイン後にコピー

プロセスがコンソールを占有していないことがわかります。このとき、コンソールは他のコマンドを実行することもできます。コンソールを占有する通常モードに移行します。

[root@localhost php]# fg
php deadloop.php
1470996682
1470996685
1470996688
1470996691
ログイン後にコピー

上記は & コマンドの簡単な紹介です

別のコマンドを見てみましょう nohup

コマンドの前に nohup を追加すると、開始されたプロセスは Linux ハング信号 (SIGHUP) を無視します。どのような状況でトリガーされるかLinux での SIGHUP シグナル? 以下の内容は Baidu Encyclopedia から引用したものです:

SIGHUP は、次の 3 つの状況で対応するプロセスに送信されます:

1. ターミナルが閉じられると、シグナルがセッションに送信されます。最初のプロセスとジョブとして送信されたプロセス (つまり、& 記号で送信されたプロセス)

2. セッションの最初のプロセスが終了すると、セッション内のフォアグラウンド プロセス グループ内の各プロセスにシグナルが送信されます

3親プロセスが存在すると、プロセス構成が孤立したプロセスグループとなり、プロセスグループ内のプロセスが停止した場合(SIGSTOPまたはSIGTSTPシグナルを受信した場合)、このシグナルがプロセスグループ内のすべてのプロセスに送信されます。

1 と 2 を組み合わせると、プロセスが & (ジョブ モード) で開始されたかどうかに関係なく、端末を閉じるときに SIGHUP シグナルが受信されることがわかります。それでは、プロセスは SIGHUP シグナルを受信したときに何をしますか? Baidu Encyclopedia から引用した同じ文を参照してください

SIGHUP シグナルのシステムのデフォルトの処理は、シグナルを受信するプロセスを終了することです。したがって、プログラムでシグナルがキャプチャされていない場合、シグナルを受信した時点でプロセスは終了します。

つまり、ターミナルプロセスを閉じると SIGHUP シグナルが受信され、このシグナルのデフォルトの処理方法は、プロセスを終了することです。もちろん、シグナルを自分で処理することも、無視することもできます。上記のループの例に少し改良を加えてみましょう

<?php
declare(ticks = 1);
pcntl_signal(SIGHUP, function(){
    // 这地方处理信号的方式我们只是简单的写入一句日志到文件中
    file_put_contents(&#39;logs.txt&#39;, &#39;pid : &#39; . posix_getpid() . &#39; receive SIGHUP 信号&#39; . PHP_EOL);
});
while(true){
    echo time().PHP_EOL;
    sleep(3);
}
ログイン後にコピー

Linux が提供する nohup コマンドを使用するだけで済みます。ターミナルに接続すると、プロセスは SIGHUP シグナルを無視し、終了しません。まず、今のシグナル処理コードを削除します。次に nohup を実行します。

[root@localhost php]# nohup php deadloop.php
ログイン後にコピー

nohup: 入力を無視し、出力を「nohup.out」に追加します

そして、書き込み権限がない場合、nohup はデフォルトでプログラムの出力を現在のディレクトリの nohup.out ファイルにリダイレクトします。 write $homepath/nohup.out

[root@localhost php]# ls
cmd.sh deadloop.php getPhoto.php nohup.out pics
[root@localhost php]# tail -f nohup.out
1470999772
1470999775
1470999778
1470999781
1470999784
1470999787
1470999790
1470999793
1470999796
1470999799
1470999802
ログイン後にコピー

を入力します。この時点ではプロセスは終了しませんが、プロセスを作成した親プロセスが終了したため、孤立プロセス (ppid=1) になります。

[root@localhost ~]# ps -ef | grep 3554
root   3554 3497 0 19:09 pts/0  00:00:00 php deadloop.php
root   3575 3557 0 19:10 pts/1  00:00:00 grep 3554
[root@localhost ~]# ps -ef | grep 3554
root   3554   1 0 19:09 ?    00:00:00 php deadloop.php
root   3577 3557 0 19:10 pts/1  00:00:00 grep 3554
[root@localhost ~]#
ログイン後にコピー

結論:

したがって、nohup メソッドと & メソッドを組み合わせると、開始されたプロセスはコンソールを占有せず、コンソールが閉じられた後、プロセス No. によって採用されます。 1 となり、孤立したプロセスになります。これはデーモン プロセスのメカニズムと非常によく似ています。

[root@localhost php]# nohup php deadloop.php >logs.txt 2>error.txt &
[1] 3612
[root@localhost php]# ps -ef |grep 3612
root   3612 3557 0 19:18 pts/1  00:00:00 php deadloop.php
root   3617 3557 0 19:19 pts/1  00:00:00 grep 3612
[root@localhost php]#
ログイン後にコピー

>logs.txt は標準出力をリダイレクトしますが、2>error.txt は標準エラー出力をリダイレクトします。

上記は最初の実装方法の紹介です。

2つ目の実装方法は、デーモンプロセスのルールや特性に合わせてコードで実装する方法です デーモンプロセスの最大の特徴は、ユーザー端末とセッションから分離されていることです。実装されたコード。主要な箇所にコメントが含まれています。

りー

以上がPHPにおけるデーモンプロセスの一般的な実装方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

session_start()が複数回呼び出されるとどうなりますか? session_start()が複数回呼び出されるとどうなりますか? Apr 25, 2025 am 12:06 AM

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

作曲家:AIを介したPHP開発の援助 作曲家:AIを介したPHP開発の援助 Apr 29, 2025 am 12:27 AM

AIは、作曲家の使用を最適化するのに役立ちます。特定の方法には次のものが含まれます。1。依存関係管理の最適化:AIは依存関係を分析し、最適なバージョンの組み合わせを推奨し、競合を減らします。 2。自動コード生成:AIは、ベストプラクティスに準拠したComposer.jsonファイルを生成します。 3.コードの品質を改善する:AIは潜在的な問題を検出し、最適化の提案を提供し、コードの品質を向上させます。これらの方法は、開発者が効率とコードの品質を向上させるのに役立つ機械学習および自然言語処理技術を通じて実装されています。

session_start()関数の重要性は何ですか? session_start()関数の重要性は何ですか? May 03, 2025 am 12:18 AM

session_start()iscrucialinphpformangingusersions.1)itInitiateSanewsessionifnoneExists、2)resumesanexistingsession、および3)SetSessionCookieforcontinuityAcrossRequests、ApplicationslicationSliviseSlikeUserauthicationAnticatent。

データ処理と計算にMySQL関数を使用する方法 データ処理と計算にMySQL関数を使用する方法 Apr 29, 2025 pm 04:21 PM

MySQL関数は、データ処理と計算に使用できます。 1.基本的な使用には、文字列処理、日付計算、数学操作が含まれます。 2。高度な使用法には、複数の関数を組み合わせて複雑な操作を実装することが含まれます。 3.パフォーマンスの最適化では、Where句での機能の使用を回避し、GroupByおよび一時テーブルを使用する必要があります。

H5:HTML5の重要な改善 H5:HTML5の重要な改善 Apr 28, 2025 am 12:26 AM

HTML5は5つの重要な改善をもたらします。1。セマンティックタグにより、コードの明確性とSEO効果が向上します。 2.マルチメディアサポートは、ビデオとオーディオの埋め込みを簡素化します。 3。フォームエンハンスメントは、検証を簡素化します。 4.オフラインおよびローカルストレージにより、ユーザーエクスペリエンスが向上します。 5。キャンバスとグラフィック機能は、Webページの視覚化を強化します。

作曲家:PHP開発者のパッケージマネージャー 作曲家:PHP開発者のパッケージマネージャー May 02, 2025 am 12:23 AM

Composerは、PHPの依存関係管理ツールであり、Composer.jsonファイルを介してプロジェクトの依存関係を管理しています。 1)依存関係情報を取得するためのComposer.jsonを解析する。 2)依存関係を解析して、依存性ツリーを形成します。 3)PackagistからVendorディレクトリへの依存関係をダウンロードしてインストールします。 4)Composer.Lockファイルを生成して、依存関係バージョンをロックして、チームの一貫性とプロジェクトの保守性を確保します。

cでタイプの特性を使用する方法は? cでタイプの特性を使用する方法は? Apr 28, 2025 pm 08:18 PM

Typetraitsは、Cでコンパイル時間タイプのチェックと操作に使用され、コードの柔軟性とタイプの安全性が向上します。 1)タイプの判断は、STD :: iS_integralおよびstd :: is_floating_pointを介して実行され、効率的なタイプチェックと出力を達成します。 2)std :: is_triviely_copyableを使用して、ベクトルコピーを最適化し、タイプに従って異なるコピー戦略を選択します。 3)コンパイル時間の意思決定、タイプの安全性、パフォーマンスの最適化、コードの複雑さに注意してください。タイプトライトの合理的な使用は、コードの品質を大幅に改善できます。

mysqlの文字セットと照合ルールを構成する方法 mysqlの文字セットと照合ルールを構成する方法 Apr 29, 2025 pm 04:06 PM

MySQLで文字セットと照合を構成する方法は次のとおりです。1。サーバーレベルでの文字セットとコレクションの設定:setNames'utf8 '; setCharacterSetutf8; setCollat​​ion_connection = 'utf8_general_ci'; 2。特定の文字セットと照合を使用するデータベースを作成します:createdatabaseexample_dbcharactersetutf8collat​​eutf8_general_ci; 3.テーブルを作成するときに文字セットとコレクションを指定:createTableExample_table(idint

See all articles