如何获取特定进程的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的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Linux 中获取 QThread 的 PID?

如何获取linux下的进程pid列表

如何获取进程的祖父母ID

如何通过进程名获取PID?

如何在给定进程名称的情况下获取 pid

如何在linux中指定进程名称时仅获取进程ID?