【问题标题】:how do I get the pid of a specific process如何获取特定进程的pid
【发布时间】:2015-02-16 21:41:26
【问题描述】:

我正在编写一个使用 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),但没有成功。有人知道这样的问题吗?

【问题讨论】:

    标签: php ssh phpseclib ps


    【解决方案1】:

    你可以这样做,我知道这不是一个非常技术性的解决方案,但它会达到你的目的:

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

    【讨论】:

      【解决方案2】:

      如果您知道它们以 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 谢谢!

      【讨论】:

      • 不客气。 :) 您可能还想了解pidof 命令。如果它安装在服务器上,您可以只获取 pid 作为空格分隔的列表。
      猜你喜欢
      • 1970-01-01
      • 2016-02-01
      • 2014-05-12
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      相关资源
      最近更新 更多