Php 如何获取特定流程的pid
我正在编写一个PHP脚本,它使用SSH连接到删除服务器。我需要做的是检查特定进程是否正在运行,以便可以终止它。我正在使用phpseclib。下面的代码连接到服务器并列出了进程,但我真的很难获得每个进程的进程idPhp 如何获取特定流程的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
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];