4

別のプロセスからスクリプトを開始する方法はありますか?そのため、プロセスが停止/終了してもスクリプトは続行されますか?

setuid はこれを行いますか? 所有者をルートに設定してからスクリプトを開始するとしたら?

たとえば、スクリプトを開始する PHP コードがある場合、httpd が終了するか強制終了された場合、スクリプトが一緒に使用されると思います。これを回避する方法はありますか?

具体的には、Fedora 10 と Apache 2 および PHP 5 を使用しています。

4

5 に答える 5

5

ここから:

function become_daemon() 
{
    $child = pcntl_fork();
    if($child) {
        exit; // kill parent
    }
    posix_setsid(); // become session leader
}

さらに、STDIN、STDOUT、および STDERR を閉じるのは良い考えですが、PHP でそれを行う方法がわかりません。

于 2009-05-13T00:51:47.760 に答える
4

「nohup yourscript.sh &」を試す

于 2009-05-13T01:22:45.617 に答える
1

php の pcntl_fork() を使用する必要があります (@bmdhacks の推奨に従って)。

基本的なプロセスは、fork、setsid、再び fork、/ への chdir、および開いているすべてのファイル記述子を閉じることです。また、標準的な方法/var/run/$NAMEでは、($NAME はデーモンの名前) というファイルを作成し、そのファイルに PID を書き込むことで、後でプロセスの実行を制御できるようにします。

私は php プログラマーではありませんが、これは標準的な *nix のものです。私がググることができる最高のPHPの例は、このhello-world-daemon-with-forkの ように見えますが、彼は自分の作業ディレクトリを「/」に変更しておらず、開いているファイル記述子を閉じたようにも見えません(よくわかりません)これが php でどのように機能するか)、元のプロセスの stdin、stdout、および stderr に接続されないようにします。

もう少し掘り下げて、php のpcntl_fork()に役立つ別の記事を見つけました。

そして、これを処理するSystem_Daemonという pear モジュールがあるようです (ここで見つけました)。

于 2009-05-13T01:15:08.740 に答える
0

bash に組み込まれている「disown」を使用して、ジョブを生成したシェルからジョブを切り離すことができます。参照: http://www.faqs.org/docs/bashman/bashref_79.html

于 2009-05-13T01:14:13.690 に答える
-5

コマンド シェルから、コマンド ラインの末尾にアンパサンド (&) を追加して、コマンドをバックグラウンドで起動し、シェルから切り離すことができます。

ここにいくつかの良い情報があります: http://www.linuxforums.org/forum/linux-programming-scripting/50096-moving-processes-background-foreground.html

于 2009-05-13T00:53:50.843 に答える