関数 pcntl_fork() を使用します;//子プロセスを作成します posix_setsid();// 現在のプロセスをプロセス リーダーとして設定します posix_getpid();// プロセス ID を取得します 例 workman Lieutenant General process/*** デーモン モードとして実行します。** @throws Exception*/ 保護された静的"/> 関数 pcntl_fork() を使用します;//子プロセスを作成します posix_setsid();// 現在のプロセスをプロセス リーダーとして設定します posix_getpid();// プロセス ID を取得します 例 workman Lieutenant General process/*** デーモン モードとして実行します。** @throws Exception*/ 保護された静的">

ホームページ  >  記事  >  バックエンド開発  >  ワーカーマンノート-phpはデーモンプロセスを作成します

ワーカーマンノート-phpはデーモンプロセスを作成します

WBOY
WBOYオリジナル
2016-07-29 08:51:041733ブラウズ

data-id="1190000005056078" data-license="sa">

使用関数

<code>pcntl_fork();//创建子进程
posix_setsid();//设置当前进程为进程组长

posix_getpid();//获取进程id</code>

作業員中尉 一般プロセス

<code>/**
 * Run as deamon mode.
 *
 * @throws Exception
 */
protected static function daemonize()
{
    if (!self::$daemonize) {
        return;
    }
    /**
     * 重设文件权限掩码
     * 子进程从父进程继承了文件权限
     * 若子进程不涉及到文件创建,可取消
     */
    umask(0);
    $pid = pcntl_fork();//创建子进程
    if (-1 === $pid) {
        throw new Exception('fork fail');
    } elseif ($pid > 0) {
        exit(0); //父进程退出
    }
    /**
     * 更改子进程为进程组长
     * 使子进程摆脱父进程控制
     */
    if (-1 === posix_setsid()) {
        throw new Exception("setsid fail");
    }
    // Fork again avoid SVR4 system regain the control of terminal.
    $pid = pcntl_fork();
    if (-1 === $pid) {
        throw new Exception("fork fail");
    } elseif (0 !== $pid) {
        exit(0);
    }
}</code>

その他の指示

基本概念

デーモンプロセス: Linuxのバックグラウンドサービスプロセス。これは存続期間の長いプロセスであり、通常は制御端末から独立しており、定期的に何らかのタスクを実行するか、発生する特定のイベントの処理を待機します。デーモンは多くの場合、システムの起動時に開始され、システムのシャットダウン時に終了します。

プロセス グループ: 1 つ以上のプロセスの集合です。プロセスグループはプロセスグループIDによって一意に識別されます。プロセス番号 (PID) に加えて、プロセス グループ ID もプロセスの必須属性です。各プロセスグループにはリーダープロセスが存在し、リーダープロセスのプロセス番号はプロセスグループIDと一致します。また、プロセスグループ ID はグループリーダープロセスの終了による影響を受けません。

セッション サイクル: セッションは 1 つ以上のプロセス グループの集合です。通常、セッションはユーザーがログインすると開始され、ユーザーがログアウトすると終了します。この期間中、ユーザーによって実行されるすべてのプロセスがこのセッションに属します。

プロセスを作成

  1. 子プロセスをフォークし、親プロセスが終了します

  2. 子プロセスをチームリーダープロセスに変更します

  3. 現在のディレクトリをルートディレクトリに変更します(chdir())

  4. ファイル許可マスクのコードをリセット

  5. ファイル記述子を閉じる

  6. デーモンが終了し、SIGCHLDシグナルを処理する

信号処理

//TODO

参照

PHPはデーモン

上記では、Workerman Notes-php 作成デーモンのプロセスを、そのプロセスの側面も含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。

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