2011-07-29 8 views
2

私はPHP 4.4.9でプログラミングされた組み込みシステムで作業しています。pcntl_fork()を使わないでPHPスクリプトをDaemonizing

バックグラウンドでデーモンとして実行されるスクリプトを作成する必要があります。通常はfork()、またはPHPの場合はpcntl_fork()を使用しますが、この機能は使用できません。シェルも欠けているので、私は標準のツールを使用することはできません。

したがって、バックグラウンドでプロセスをきれいに開始するには、他にどのような方法がありますか?

+2

PHP4は現在サポートされていません。更新する必要があります。 – KingCrunch

+0

時間制限を無制限に設定できますか? - @ KingCrunch:組み込みシステムによっては、その選択肢がありません。 – hakre

+0

@ KingCrunch:残念ながら..私はベンダーがこれをするのを待たなければならないでしょう。 hakre:この場合、時間制限は実際問題ではありません。 –

答えて

1

kingCrunchによれば、本当にアップグレードする必要があります。

まず、pcntl_fork()を呼び出すだけではなく、デーモンを作る方法が増えています。 Unix programming FAQUnix socket FAQを読むことができます。

次に、並行性の問題をどのように解決しようとしているのかについては言及していません。フォークはこれに対する1つの解決策ですが、fork()をデーモンで使用する唯一の理由ではありません。

あなたは本当に2つの問題を解決しました。最初にどのようにプログラムをデーモン化し、次に並行処理をどのように扱うのですか?

前者を避ける後者へのアプローチの1つは、[x] inetdからサーバーを実行することです。

並列処理の問題を解決するもう1つの方法は、単一のスレッドサーバーを実行してsocket_select(またはstream_select)を使用して接続を多重化することですが、PHP 4でどれくらいうまくサポートされているかわかりません - good example hereがあります。

単純な解決策は、プログラムをブートストラップするためにdaemon()を使用してCで簡単なラッパープログラムを書くことです。あるいは、inittabから直接起動することもできます。または複雑な管理機能を備えたソリューションについては、DJBをご覧ください。daemontools

+0

あなたの洞察をいただきありがとうございます!どのようにデーモンを書くかを知っていて、fork()とexec()は十分であったはずです。私は、デーモンを書く方法ではなく、forkに代わるものを尋ねる方法で質問を公式化しようとしました"他の人には便利かもしれない答えは+1です。 –

関連する問題