2012-10-22 8 views
1

Google에서 내가 찾고있는 것을 찾지 못해서 정말 중요합니다.명령 줄에서 작업이 완료되면 어떻게 알 수 있습니까?

명령 줄에서 실행되는 응용 프로그램 (또는 작업을 호출하는 것이 더 적절합니까?)을 언제 알 수 있습니까? 명령이 여전히 복사본을 만들 백그라운드에서 실행되는 동안에도

exec("cp -R /test/ /var/test/test"); 

PHP 스크립트는 다음 코드로 이동을 계속합니까 : 나는 이렇게 할 경우 여러 개의 파일을 복사하는 작업을 수행하는 경우 어떻게 PHP는 알 수 있습니까? 또는 PHP 스크립트는 복사가 완료 될 때까지 기다릴 것입니까? 명령 행 응용 프로그램이 완료되면 스크립트에 어떻게 알리는가? 어떤 종류의 상호 작용이 있어야합니다.

답변

1

PHP의 exec는 문자열에 yes를 반환합니다. 명령이 완료 될 때까지 웹 페이지가 고정됩니다. 예를 들어 페이지가 5 초 동안로드로

<?PHP 
echo exec("sleep 5; echo HI;"); 
?> 

가 나타납니다 실행이 간단한 코드, 다음이 표시됩니다 :

HI; 

이 어떻게 PHP는 알 수없는 경우 여러 복사 작업 내가 좋아하면 파일이 완료 되니?

PHP는 모르겠다. 단지 명령을 실행하기 만하면 작동 여부에 상관없이이 명령에서 생성 된 문자열을 반환한다. 통계에 TRUE/FALSE를 반환하기 때문에 PHP 복사 명령을 사용하는 것이 더 좋습니다. 또는 0/FALSE 또는 1/TRUE를 리턴하는 bash/sh 스크립트를 작성하여이 라우트로가는 경우 명령이 성공했는지 판별하십시오. 그런 다음 PHP로 할 수 있습니다 :

<?PHP 
$answer = exec("yourScript folder folder2"); 
if ($answer=="1") { 
//Plan A Worked 
} else { 
//Plan A FAILED try PlanB 
} 
?> 
0

exec 호출이 반환 될 때까지 반환됩니다.

그러나 시작한 명령이 아직 완료되지 않았지만 종료 호출이 반환 될 수 있습니다. 예를 들어 명령 끝에 "&"을 명시 적으로 지정하여 컨트롤에서 분리하면 그럴 수도 있습니다.

관련 문제