Como posso iniciar um comando, esperar 2 segundos e retornar a saída sem matar o comando?

4

Estou tentando lançar um comando do php com o shell_exec que chama um script bash que lança um programa que fica rodando, mas às vezes esse programa lança um erro e sai, o que eu preciso é uma maneira de chamar o script e depois 2 segundos retornam qualquer que seja o programa gerado, se o programa for executado corretamente eu só quero que ele retorne o PID e que ele continue rodando no Linux, mas o PHP continua, se lançar um erro e fechar eu quero a saída desse erro, aqui está o que eu tentou:

#!/bin/bash

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

Se ele gerar um erro, ele retornará bem com a mensagem de erro, mas se ele rodar normalmente o PHP fica preso e nunca retorna porque o programa continua rodando, como posso fazer o script retornar mesmo se ele continuar rodando após 2 segundos? / p>

Como posso fazer isso com o bash ?, eu consegui fazer isso em C # com a classe Process como esta

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

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

    return ez.Id.ToString();
    
por Roberto Arosemena 09.04.2015 / 02:52

1 resposta

4

Isso deve funcionar:

#!/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
    
por 09.04.2015 / 04:47

Tags