我正在尝试使用 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