如何启动命令,等待 2 秒并返回输出而不终止该命令?

如何启动命令,等待 2 秒并返回输出而不终止该命令?

我正在尝试使用 shell_exec 从 php 启动一个命令,该命令调用一个 bash 脚本,该脚本启动一个保持运行的程序,但有时该程序会抛出错误并退出,我需要的是一种调用脚本并在 2 秒后返回的方法无论程序输出什么,如果程序正确启动,我只希望它返回 PID,并且它在 Linux 上保持运行,但 PHP 继续运行,如果它抛出错误并关闭,我想要该错误的输出,这就是我尝试过的:

#!/bin/bash

ezstream -c $1 &
ezpid=$!
echo $ezpid
sleep 2
disown

如果它抛出一个错误,它会很好地返回并显示错误消息,但如果它正常运行,PHP就会卡住并且永远不会返回,因为程序一直在运行,我怎样才能让脚本返回,即使它在2秒后继续运行?

我怎样才能用 bash 做到这一点?我可以在 C# 中使用 Process 类来做到这一点

    Process ez = new Process();
    //ez.parameters
    ez.Start();

    if (ez.WaitForExit(2000))
    {
        string message = ez.StandardOutput.ReadToEnd();
        return message;
    }

    return ez.Id.ToString();

答案1

这应该完成工作:

#!/bin/bash

ezstream -c $1 >log.txt 2>error.txt & 
ezpid=$!
echo $ezpid
sleep 2
if ps | grep $ezpid ; then
    echo ezsteam is still running!
    cat log.txt
    exit 0
else
    echo ezstream is dead
    cat error.txt
    exit 1
fi

相关内容