【问题标题】:How do I know when the task from command line is finished?我如何知道命令行中的任务何时完成?
【发布时间】:2012-10-12 18:33:41
【问题描述】:

这非常重要,因为我在 Google 中找不到任何我想要的东西。

我如何知道命令行执行的应用程序(或者将其称为任务更合适?)何时完成?如果我这样做,PHP如何知道复制多个文件的任务是否完成:

 exec("cp -R /test/ /var/test/test");

即使命令仍在后台运行以进行复制,PHP 脚本是否继续转到下一个代码?还是 PHP 脚本等到复制完成?以及命令行应用程序在完成后如何通知脚本(如果有的话)?一定有某种互动正在发生。

【问题讨论】:

    标签: php linux command-line interaction


    【解决方案1】:

    php 的 exec 返回一个字符串,所以是的。您的网页将冻结,直到命令完成。 比如这个简单的代码

    <?PHP
    echo exec("sleep 5; echo HI;");
    ?>
    

    执行时会在页面加载5秒后出现,然后显示:

     HI;
    

    如果我这样做,PHP如何知道复制多个文件的任务是否完成?

    Php 不知道,它只是简单地运行命令,并不关心它是否有效,而是返回从该命令生成的字符串。这就是为什么最好使用 PHP 的复制命令,因为它在统计时返回 TRUE/FALSE。或者创建一个 bash/sh 脚本,该脚本将返回 0/FALSE 或 1/TRUE 以确定如果您要走这条路线,命令是否成功。然后你可以这样 PHP:

    <?PHP
    $answer = exec("yourScript folder folder2");
    if ($answer=="1") {
    //Plan A Worked
    } else {
    //Plan A FAILED try PlanB
    }
    ?>
    

    【讨论】:

      【解决方案2】:

      它一直等到 exec 调用返回,无论它返回什么。

      但是,退出调用可能会返回,尽管它已启动的命令尚未完成。如果您从控件中分离出来,可能就是这种情况,例如通过在命令末尾显式指定“&”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-02
        • 1970-01-01
        • 1970-01-01
        • 2013-11-08
        相关资源
        最近更新 更多