/ / Uruchamianie procesu unix w tle z php [duplikat] - php, shell, unix

Uruchamianie procesu uniksowego w tle z php [duplicate] - php, shell, unix

Jeśli uruchomię to polecenie unix bezpośrednio w powłoce:

$ sleep 100 &

uśpienie działa w tle zgodnie z oczekiwaniami i mogę kontynuować pracę w linii poleceń.

ale próbując tego samego z shell_exec () i php otrzymuję różne wyniki.

<?php

$sleep = $argv[1];
$shell="sleep " . $sleep . " &";
shell_exec($shell);

?>

podczas wykonywania php sleep.php 100 linia poleceń zawiesza się i nie akceptuje więcej poleceń, aż do zakończenia snu. Nie jestem pewien, czy jest to niuans, którego brakuje mi shell_exec() / $argv php lub z powłoką unix.

Dzięki.

Odpowiedzi:

3 dla odpowiedzi № 1

The shell_exec funkcja próbuje przechwycić wyjście polecenia, którego nie może wykonać, jednocześnie kontynuując przetwarzanie. W rzeczywistości, jeśli spojrzysz na kod źródłowy php, php shell_exec funkcja robi popen Wywołanie C, które wykonuje wait syscall w poleceniu. wait gwarantuje, że podproces nie wróci, dopóki dziecko nie opuści.