微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

bash – 如何启动命令,等待2秒并返回输出而不删除命令?

我正试图从PHP启动一个命令,shell_exec调用一个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();

解决方法:

这应该做的工作:

#!/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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐