как мне получить pid конкретного процесса

Я пишу сценарий PHP, который подключается к удаленному серверу, используя SSH. мне нужно проверить, запущен ли определенный процесс или нет, чтобы я мог его прекратить. Я использую phpseclib. следующий код подключается к серверу и перечисляет процессы, но я действительно застрял в получении идентификатора процесса каждого процесса!

include('Net/SSH2.php');
$ssh = new Net_SSH2('192.168.1.1');
$ssh->login('username', 'password') or die("SSH Login failed");
$ps = $ssh->exec('ps -ef | grep ".php"');
echo $ps;

Выход:

root     32405     1  3 09:45 ?        00:03:30 php /afghanwiz/distributor1.php
root     32407     1  3 09:45 ?        00:03:33 php /afghanwiz/distributor2.php

Я пытался получить pid (здесь 32405 и 32407), используя разрывы строк и слов, но безуспешно. Кто-нибудь имеет представление о такой проблеме?

-1

Решение

Если вы знаете, что они работают от имени пользователя root, это может помочь вам:

$output = <<<EOF
root     32405     1  3 09:45 ?        00:03:30 php /afghanwiz/distributor1.php
root     32407     1  3 09:45 ?        00:03:33 php /afghanwiz/distributor2.php
EOF;

preg_match_all('/root\s+(\d+)/', $output, $m);
var_dump($m[1]);

Если имя пользователя может быть чем-либо, что-то вроде:

preg_match_all('/[a-z_][a-z0-9_]{0,30}\s+(\d+)/', $output, $m);

буду работать. Кстати, имя пользователя regex было взято отсюда: https://stackoverflow.com/a/6949914/171318 Спасибо!

1

Другие решения

Вы можете сделать что-то вроде этого, я знаю, что это не очень удачное решение, но оно будет служить вашей цели:

$arr = explode('     ',$ps);
for ($i=1; $i<count($arr); $i=$i+3)
echo $arr[$i];
0

По вопросам рекламы [email protected]