shell_exe c не остановится, даже если добавить новый shell_exe c, чтобы остановить другой - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть сценарий PHP, который должен запускать файл. sh с использованием shell_exe c

echo shell_exec('sh /var/www/html/daloradius/start.sh > /dev/null 2>/dev/null &');

Я просто вывожу его в фоновый режим. Это мой старт. sh

sudo tcpdump port 1812 -w testing.pcap

мы знаем, что tcpdump всегда слушает все время, я попытался решить эту проблему (остановить процесс tcpdump) с помощью кнопки, которая запускает другой shell_exe c, который Стоп. sh

pid=$(ps aux | grep "sudo tcpdump" | head -1 | cut -d '.' -f 1 | cut -d ' ' -f 7)
sudo kill $pid

Стоп. sh работает нормально, когда я тестировал его в кли, но когда я нажимал кнопку, запускающую запуск. sh, и я пытался остановить его с помощью кнопка, которая вызывает остановку. sh это не работает. Tcpdump не остановится, но когда я пытаюсь остановить его в кли, используя stop. sh это работает хорошо. Кто-нибудь может дать мне решение, чтобы заставить остановить вещи tcpdump? Спасибо

1 Ответ

0 голосов
/ 02 апреля 2020

Вы пытаетесь использовать bash, когда вам нужно организовать процесс из php.

Здесь мы получаем PID команды и уничтожаем ее из PHP. Замените оператор Sleep любым кодом, который у вас есть.

<?php
# Script must be run with sudo to start tcpdump
# Be security conscious when running ANY code here
$pcap_file = 'testing.pcap';
$filter = 'port 1812'
$command = "tcpdump $filter -w $pcap_file" . ' > /dev/null 2>&1 & echo $!;';

$pid = (int)shell_exec($command);
echo "[INFO] $pid tcpdump: Writing to $pcap_file\n";

# Some important code. Using sleep as a stand-in.
shell_exec("sleep 5");

echo "[INFO] $pid tcpdump: Ending capture\n";
shell_exec("kill -9 $pid");

Обратите внимание, что tcpdump имеет опцию -c, чтобы остановить n полученных пакетов, и вы можете вращать файлы с -G. Вы можете прочитать справочную страницу tcpdump , чтобы получить от нее максимум пользы.

...