0

我在底部看到了 http://php.net/manual/en/function.posix-setsid.php pcntl_fork() 示例。该代码工作正常。我可以将它与 php 线程结合起来吗?http://www.php.net/manual/en/class.thread.php

<?php
    $pid = pcntl_fork(); // fork
    if ($pid < 0)
        exit;
    else if ($pid) // parent
        exit;
    else { // child

        $sid = posix_setsid();

        if ($sid < 0)
            exit;

        for($i = 0; $i <= 60; $i++) { // do something for 5 minutes
            sleep(5);
        }
    }
?>
4

1 回答 1

1

我不确定你想要实现什么,但如果你想随机混合线程和分叉,你最好在做之前阅读这个:线程和叉子():在混合它们之前三思而后行如果你只是想脱离控制终端,然后启动线程(但不是进程),这很可能会很好。(只需将for部分替换为线程代码即可。)

无论如何,应该注意的是,编写没有内存泄漏的 PHP 守护程序非常困难,但并非不可能。预计会花费大量时间来查找内存问题,尤其是在您使用复杂的类结构时。

此外,一些 PHP 的扩展不是线程安全的,尤其是当它们执行一些外部二进制文件时。在执行此操作之前,您可能真的要三思而后行。我也会考虑选择一种不同的语言。

于 2013-05-16T09:20:29.747 回答