如何获取特定进程的pid
Posted
技术标签:
【中文标题】如何获取特定进程的pid【英文标题】:how do I get the pid of a specific process 【发布时间】: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),但没有成功。有人知道这样的问题吗?
【问题讨论】:
【参考方案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://***.com/a/6949914/171318 谢谢!
【讨论】:
不客气。 :) 您可能还想了解pidof
命令。如果它安装在服务器上,您可以只获取 pid 作为空格分隔的列表。以上是关于如何获取特定进程的pid的主要内容,如果未能解决你的问题,请参考以下文章