Php 如何获取特定流程的pid

Php 如何获取特定流程的pid,php,ssh,phpseclib,ps,Php,Ssh,Phpseclib,Ps,我正在编写一个PHP脚本,它使用SSH连接到删除服务器。我需要做的是检查特定进程是否正在运行,以便可以终止它。我正在使用phpseclib。下面的代码连接到服务器并列出了进程,但我真的很难获得每个进程的进程id include('Net/SSH2.php'); $ssh = new Net_SSH2('192.168.1.1'); $ssh->login('username', 'password') or die("SSH Login failed"); $ps = $ssh->e

我正在编写一个PHP脚本,它使用SSH连接到删除服务器。我需要做的是检查特定进程是否正在运行,以便可以终止它。我正在使用phpseclib。下面的代码连接到服务器并列出了进程,但我真的很难获得每个进程的进程id

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),但没有成功。有人知道这样的问题吗?

如果您知道他们是以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]);

会有用的。顺便说一句,用户名regex取自这里:谢谢

您可以这样做,我知道这不是一个非常技术性的解决方案,但它可以满足您的目的:

$arr = explode('     ',$ps);
for ($i=1; $i<count($arr); $i=$i+3)
   echo $arr[$i];
$arr=爆炸(“”,$ps);
对于($i=1;$iYou是受欢迎的。:)您可能还想了解
pidof
命令。如果它安装在服务器上,您可以只获得pids作为空间分隔列表。
$arr = explode('     ',$ps);
for ($i=1; $i<count($arr); $i=$i+3)
   echo $arr[$i];