PHP: Получить LINUX PID команды - PullRequest
1 голос
/ 20 октября 2011

Я запускаю команду на своем сервере 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: (легко)

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

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

Ответы [ 5 ]

14 голосов
/ 20 октября 2011

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

Объединяя с кодом @ 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 - фильтрует только строки, содержащие «screen», а затем «test_command_one» в той же строке
  • grep -v - удаляет из вывода ту же самую строку, которую мы выполняем, потому что она также будетmatched
  • awk '{print $ 2}' - awk разбивает ввод на столбцы и использует несколько пробелов в качестве разделителя.Это содержимое печати 2-го столбца
  • head -1 - ограничивает вывод только первой строкой.В случае, если у вас запущено несколько экранов, возвращается только первый идентификатор.
2 голосов
/ 20 октября 2011

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

<?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

1 голос
/ 03 апреля 2012

Вы также можете попробовать это:

echo exec('pidof test_command_one');

Это короче;)

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

0 голосов
/ 05 ноября 2015

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

$pid = getmypid();
0 голосов
/ 14 июля 2014
$pid = shell_exec($cmd . " && echo $!");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...