我正在编写一个使用SSH连接到删除服务器的PHP脚本。我需要做的是检查特定进程是否正在运行,以便我可以终止它。我正在使用 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),但没有成功。任何人都知道这个问题吗?
答案 0 :(得分: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);
会奏效。顺便说一句,用户名正则表达式取自这里:https://stackoverflow.com/a/6949914/171318谢谢!
答案 1 :(得分:0)
你可以做这样的事情,我知道它不是一个非常技术性的解决方案,但它将满足你的目的:
$arr = explode(' ',$ps);
for ($i=1; $i<count($arr); $i=$i+3)
echo $arr[$i];