2013-05-16 23 views
0

我看到了, http://php.net/manual/en/function.posix-setsid.php pcntl_fork()示例在底部。该代码工作正常。我可以结合它的PHP线程? http://www.php.net/manual/en/class.thread.php如何在线程中使用php pcntl_fork?

<?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); 
     } 
    } 
?> 

回答

1

我不知道你想达到什么,但如果你想随意搭配线程和叉子,你最好做这件事之前,先阅读:Threads and fork(): think twice before mixing them如果你只是想从控制终端分离并然后启动线程(但不是进程),这很可能会很好。 (只需用线程代码替换for部分。)

无论如何,应该指出,编写没有内存泄漏的PHP守护进程非常困难,但并非不可能。预计花很多时间寻找内存问题,特别是如果您使用复杂的类结构。

此外,一些PHP的扩展是非线程安全,特别是如果他们执行一些外部二进制文件。在做这件事之前,你可能真的想三思。我也会考虑选择一种不同的语言。

+0

好的,谢谢。所以最好不要在PHP中使用线程。 – user2380555