문제

나는 최선의 방법을 찾고 있거나 실제로 배경에서 PHP에서 프로세스를 시작하여 스크립트에서 나중에 죽일 수 있습니다.

지금은 다음을 사용하고 있습니다 : shell_exec ($ command); 이것의 문제는 프로그램이 닫히기를 기다린다는 것입니다.

나는 shell 명령을 실행할 때 nohup과 같은 효과를 갖는 것을 원합니다. 이렇게하면 백그라운드에서 프로세스를 실행할 수 있으므로 스크립트의 나중에 닫을 수 있습니다. 이 스크립트는 정기적으로 실행되며 이것이 실행될 때 프로그램을 열 수 없으므로 닫아야합니다.

백그라운드에서 명령을 실행하기 위해 .BAT 파일을 생성 할 생각이지만 나중에 프로세스를 어떻게 죽일 수 있습니까?

내가 Linux에서 본 코드는 다음과 같습니다.

$PID = shell_exec("nohup $Command > /dev/null & echo $!");
// Later on to kill it
exec("kill -KILL $PID");

편집하다: 프로세스를 죽일 필요가 없다는 것이 밝혀졌습니다.

도움이 되었습니까?

해결책

이게 PHP 매뉴얼의 기능 돕다?

function runAsynchronously($path,$arguments) {
    $WshShell = new COM("WScript.Shell");
    $oShellLink = $WshShell->CreateShortcut("temp.lnk");
    $oShellLink->TargetPath = $path;
    $oShellLink->Arguments = $arguments;
    $oShellLink->WorkingDirectory = dirname($path);
    $oShellLink->WindowStyle = 1;
    $oShellLink->Save();
    $oExec = $WshShell->Run("temp.lnk", 7, false);
    unset($WshShell,$oShellLink,$oExec);
    unlink("temp.lnk");
}

다른 팁

shell_exec('start /B "C:\Path\to\program.exe"');

그만큼 /B 매개 변수는 여기에서 핵심입니다.

더 이상 이것을 찾은 곳을 찾을 수없는 것 같습니다. 그러나 이것은 나를 위해 작동합니다.

PHP 5.2.8이있는 Windows 2000 서버에서 동일하게 달성하려고했습니다.

솔루션 중 어느 것도 저에게 효과가 없었습니다. PHP는 응답을 계속 기다리고 있습니다.

솔루션은 다음을 찾았습니다.

$cmd = "E:\PHP_folder_path\php.exe E:\some_folder_path\backgroundProcess.php";
pclose(popen("start /B ". $cmd, "a"));  // mode = "a" since I had some logs to edit

PHP 매뉴얼에서 exec:

이 기능으로 프로그램이 시작되면 백그라운드에서 계속 실행 되려면 프로그램의 출력을 파일 또는 다른 출력 스트림으로 리디렉션해야합니다. 그렇게하지 않으면 프로그램 실행이 종료 될 때까지 PHP가 매달릴 수 있습니다.

즉, 출력을 파일로 파일하고 PHP를 기다리지 않습니다.

exec('myprog > output.txt');

메모리에서, 나는 당신이 ( @로 할 때와 같이) exec 일시 정지에서 실행을 방지하는 명령의 제품군 - 그래도 무엇인지 기억할 수 없습니다.

편집하다 그것을 발견! UNIX에서 실행 및 선불 프로그램이 백그라운드에서 실행됩니다. 죄송합니다. 많은 도움이되지 않습니다.

Windows 10 및 Windows Server 2012 머신에서 PCLOSE/POPEN 내에서 안정적으로 작동 한 유일한 솔루션은 다음과 같이 PowerShell의 시작 프로세스 명령을 호출하는 것이 었습니다.

pclose(popen('powershell.exe "Start-Process foo.bat -WindowStyle Hidden"','r'));

또는 인수를 공급하고 출력을 리디렉션하려는 경우 :

pclose(popen('powershell.exe "Start-Process foo.bat 
             -ArgumentList \'bar\',\'bat\' 
             -WindowStyle Hidden
             -RedirectStandardOutput \'.\\console.out\' 
             -RedirectStandardError \'.\\console.err\'"','r'));
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top