![명령을 시작하고 2초 동안 기다렸다가 명령을 종료하지 않고 출력을 반환하려면 어떻게 해야 합니까?](https://linux55.com/image/62685/%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%8B%9C%EC%9E%91%ED%95%98%EA%B3%A0%202%EC%B4%88%20%EB%8F%99%EC%95%88%20%EA%B8%B0%EB%8B%A4%EB%A0%B8%EB%8B%A4%EA%B0%80%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%A2%85%EB%A3%8C%ED%95%98%EC%A7%80%20%EC%95%8A%EA%B3%A0%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%EB%B0%98%ED%99%98%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
나는 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