명령을 시작하고 2초 동안 기다렸다가 명령을 종료하지 않고 출력을 반환하려면 어떻게 해야 합니까?

명령을 시작하고 2초 동안 기다렸다가 명령을 종료하지 않고 출력을 반환하려면 어떻게 해야 합니까?

나는 shell_exec를 사용하여 계속 실행되는 프로그램을 시작하는 bash 스크립트를 호출하는 PHP에서 명령을 실행하려고 시도하고 있지만 때로는 프로그램에서 오류가 발생하고 종료됩니다. 필요한 것은 스크립트를 호출하여 수행하는 방법입니다. 2초 메서드가 프로그램 출력을 반환한 후 프로그램이 올바르게 시작되고 Linux에서 계속 실행되는 경우에만 PID를 반환하고 싶지만 PHP는 계속 실행됩니다. 오류가 발생하고 닫히면 출력을 원합니다. 그 오류에 대해 이것이 내가 시도한 것입니다.

#!/bin/bash

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

오류가 발생하면 정상적으로 반환되고 오류 메시지가 표시되지만 정상적으로 실행되면 프로그램이 계속 실행되기 때문에 PHP가 중단되고 반환되지 않습니다. 2초 후에 계속 실행하더라도 스크립트가 반환되도록 하려면 어떻게 해야 합니까?

Bash를 사용하여 이 작업을 어떻게 수행할 수 있나요? Process 클래스를 사용하여 C#에서 이 작업을 수행할 수 있습니다.

    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

관련 정보