Intereting Posts
Получить все родительские ключи заданного дочернего ключа в массиве Мой div при нажатии не отправляет форму внутри него с помощью js Невозможно изменить значение xml с помощью PHP как подключиться к базе данных на другом сервере Динамические Facebook и метатеги в WordPress PHP Выравнивание ларавелла неправильно вызвано несколькими встроенными css и внешними css в одном файле клипа Уменьшение использования памяти для массива и SplFixedArray mysqli_query () ожидает как минимум 2 параметра & mysqli_query (): пустые сообщения об ошибках запроса Правильный порядок команд для получения num_rows после fetch_array (mysqli OOP) Laravel, Faker – Увеличивает сгенерированную датуВремя Вычислять месяцы между двумя датами с использованием DateInterval без упаковки в течение года Могу ли я искать членов класса PHP и методы с помощью поиска vim «star»? Ошибка 500: преждевременный конец заголовков скриптов Dropbox: создайте прямую ссылку для скачивания Как загрузить большой файл с использованием PHP (использование низкой памяти)

PHP: получить идентификатор LINUX команды

Я выполняю команду на моем Linux-сервере (Ubuntu). Например:

screen -A -h 1500 -m -dmS test_command_one /home/SKY-users/SKY-001/./script 

Есть ли какой-либо путь к PID этого фона, какое имя экрана: test_command_one ?

ps aux | grep test_command_one:

 root 6573 8.1 2.4 271688 123804 pts/4 Ss+ Oct19 3:04 /home/SKY-users/SKY-001/./ ... 

Я хотел бы вернуть этот PID: 6573

PHP: (легко)

 <?php $output = shell_exec('sudo ps aux | grep test_command_one'); $array = explode("\n", $output); echo '<pre>'.print_r($array, true).'</pre>'; ?> 

Спасибо за помощь!

Solutions Collecting From Web of "PHP: получить идентификатор LINUX команды"

Редактировать:

Комбинируя с кодом @WagnerVaz

 $mystring = "test_command_one"; exec("ps aux | grep 'screen .* $mystring' | grep -v grep | awk '{ print $2 }' | head -1", $out); print "The PID is: " . $out[0]; 

объяснение

  • ps aux – показывает процессы для всех пользователей и скрытые процессы
  • grep – фильтрует только строки, содержащие «экран», а затем «test_command_one» в одной строке
  • grep -v – удаляет из вывода ту же самую строку, которую мы выполняем, потому что она также будет сопоставлена
  • awk '{print $ 2}' – awk разбивает ввод на столбцы и использует несколько пробелов в качестве разделителя. Это печатное содержимое 2-го столбца
  • head -1 – ограничивает вывод только в первую строку. Это на случай, если вы используете несколько экранов, возвращается только первый идентификатор.

Попробуй это:

 <?php $mystring = "test_command_one"; exec("ps aux | grep \"${mystring}\" | grep -v grep | awk '{ print $2 }' | head -1", $out); print "The PID is: " . $out[0]; ?> 

Отредактировано: В сочетании с оболочкой exec @romaninsh

Вы также можете попробовать следующее:

 echo exec('pidof test_command_one'); 

Это короче;)

Смотрите также: pidof manpage

 $pid = shell_exec($cmd . " && echo $!"); 

Или просто используйте:

 $pid = getmypid();