【问题标题】:Multiple exec commands php [duplicate]多个exec命令php [重复]
【发布时间】:2011-08-10 14:48:20
【问题描述】:

可能重复:
php in background exec() function

我正在尝试从 PHP 运行两个 exec 命令。一个是可能运行几分钟的脚本,并且它只能有一个实例。第二个 exec 只是检查第一个进程是否正在运行,然后让您再次运行它或重定向您。代码是这样的。

这是主要流程

$command = '/home/user/active/Nem-Swd.elf 30 > /dev/null 2>&1 & echo $!';

这是检查另一个是否已经在运行的进程。

exec("ps ax | grep $name 2>&1", $output);

我知道在 php API 中它说:

如果使用此函数启动程序,为了使其继续在后台运行,必须将程序的输出重定向到文件或另一个输出流。否则会导致 PHP 挂起,直到程序执行结束。

但我不明白这意味着什么。

【问题讨论】:

  • 这意味着您需要将输出重定向到文件(文本文件、xml 文件等),以便您的 exec 语句在 PHP 程序退出后继续运行。

标签: php


【解决方案1】:

这意味着如果您运行 exec 命令而不重新路由其输出,您当前的 PHP 脚本将在终止脚本之前等待该命令完成。由于您将输出路由到标准输出,我相信您应该没问题。如果您只是运行exec($commandJob),那么您会遇到这个问题。


好像这个问题已经回答了:
php in background exec() function

至少(例如)您需要这样做才能使其在后台运行:
exec("php test.php &");


还有其他启动流程的方法可能也值得研究: http://www.php.net/manual/en/book.pcntl.php
http://php.net/manual/en/function.popen.php

【讨论】:

  • 为什么还要等到第一个进程完成?
  • 所以你连续运行了两个 exec,但第二个从不运行?
  • 第二个仅在第一个完成时运行。
  • 如果您执行exec($commandJob.' > command.out') 之类的操作会怎样?
  • 也许你需要使用类似以下之一的东西:php.net/manual/en/book.pcntl.phpphp.net/manual/en/function.popen.php
猜你喜欢
  • 1970-01-01
  • 2019-01-27
  • 2014-03-07
  • 1970-01-01
  • 2012-05-27
  • 2023-01-13
  • 2021-08-05
  • 1970-01-01
  • 2014-05-17
相关资源
最近更新 更多