Я пытаюсь выполнить две команды dmd одновременно, используя PHP shell_exec()
. Одна команда запускает Tshark в течение 5 секунд. Вторая команда запускает файл .exe
. Tshark – это программа, которая фиксирует передачу сетевых пакетов по сетевому интерфейсу. Вторая программа (с именем mtu.exe) отправляет сетевые пакеты с локальной машины на удаленный компьютер.
Дело в том, что когда я запускаю эти команды вручную , я запускаю первую команду. Через мгновение я запускаю второй, и все идет хорошо, и через секунду или около того ожидаемые пакеты передаются mtu.exe
и захватываются tshark.exe
. Все работает отлично.
Но затем, когда я запускаю следующий скрипт для выполнения этих команд, я получаю следующий вывод:
$firstCommand = '"C:\Program Files\Wireshark\tshark.exe" -a duration:5 -w capture.pcapng 2>&1'; echo $firstCommand."<br><br>"; $secondCommand = "mtu.exe -d0 -a43020008 -g43010008 -i987654321 -s"Merry Xmass" 2>&1"; echo $secondCommand."<br><br>"; echo shell_exec($firstCommand . " && " . $secondCommand);
Вывод:
"C:\Program Files\Wireshark\tshark.exe" -a duration:5 -w capture.pcapng 2>&1 mtu.exe -d0 -a43020008 -g43010008 -i987654321 -s"Merry Xmass" 2>&1 Fatal error: Maximum execution time of 30 seconds exceeded in C:\xampp\htdocs\Test\index.php on line 10
Строка 10 – это строка, где находится shell_exec()
. Вопрос, как решить эту проблему? Почему это происходит?
Запустите tshark
в фоновом режиме, &
поэтому оболочка не tshark
завершения до запуска mtu
. Затем используйте команду wait
чтобы дождаться завершения команды background.
echo shell_exec($firstCommand . " & " . $secondCommand . "; wait");
Это синтаксис оболочки Unix, я не знаю, есть ли что-то эквивалентное в Windows cmd.