首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kill fork进程

Kill fork进程
EN

Stack Overflow用户
提问于 2013-01-20 09:47:51
回答 2查看 768关注 0票数 1

我想写一个php脚本在后台运行。这需要pcntl_fork。我使用这个函数来派生一个孩子:

代码语言:javascript
复制
function launchchild($programexe,$programvars) 
{ 
//foreach ($tasks as $key => $v){ 
switch ($pid = pcntl_fork()) { 
  case -1: 
     // @fail 
     die('Fork failed'); 
     break; 

  case 0: 
     // @child: Include() misbehaving code here 
     pcntl_exec($programexe,$programvars);
     break; 

  default: 
     // @parent 
     //pcntl_waitpid($pid, $status); 
     break; 
} 

//print "Done! :^)\\n\\n"; 
}

我马上用下面这样的代码片段来调用它:

代码语言:javascript
复制
$parameters = array('/Applications/XAMPP/xamppfiles/htdocs/ping/senario2/master/gather_checks.php', $serialize_triagger, $server_list[$server_choose]);
launchchild('/Applications/XAMPP/xamppfiles/bin/php',$parameters); // fork a child for parallel processing.

因此,它只在一分钟内优雅地工作。我用'ps -ax | grep php‘检查了这个过程。我看到有太多的进程永远不会结束,直到代码给出35错误,这意味着我们没有更多的内存来运行它!这是'ps -ax | grep php‘的结果

代码语言:javascript
复制
ps -ax | grep php
12020 ttys001    0:00.07 /Applications/XAMPP/xamppfiles/bin/php /Applications/XAMPP/xamppfiles/htdocs/ping/senario2/master/main.php
12021 ttys001    0:00.00 (php-5.3.1)
12022 ttys001    0:00.00 (php-5.3.1)
12025 ttys001    0:00.00 (php-5.3.1)
12028 ttys001    0:00.00 (php-5.3.1)
12037 ttys001    0:00.00 (php-5.3.1)
12040 ttys001    0:00.00 (php-5.3.1)
12043 ttys001    0:00.00 (php-5.3.1)

当我取消对//pcntl($pid,$status)的注释时,它就像一个护身符一样工作,从来没有任何问题。但我不想让父母等着做孩子的工作。任何事情都可能是有帮助的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-20 10:05:46

您正在启动另一个程序/脚本,因此不需要任何派生,只需使用system()screen获取终端(idk if & works)

票数 0
EN

Stack Overflow用户

发布于 2013-01-20 10:17:23

PCNTL函数,如pcntl_fork,不应该从web服务器使用,因为子进程最终不会得到正确的清理。(您一定已经注意到了。)这些函数主要用于独立的PHP守护进程,以及在这里不适用的特殊情况下使用。

改为使用更高级别的流程控制功能,如proc_open()。如果您需要在后台运行进程,请使用&通过shell运行它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14420918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档