Php 解析grep输出
我正在尝试制作一个服务器管理器,以下是我目前所拥有的:Php 解析grep输出,php,linux,shell,grep,Php,Linux,Shell,Grep,我正在尝试制作一个服务器管理器,以下是我目前所拥有的: <?php $COMMAND = shell_exec('ps ax --format command | grep skulltag'); $arr = explode("./",$COMMAND); $text = shell_exec('pgrep -u doom'); $arrtext = preg_split('/\s+/', $text); for( $i = 1; $i < count($arr); $i++ )
<?php
$COMMAND = shell_exec('ps ax --format command | grep skulltag');
$arr = explode("./",$COMMAND);
$text = shell_exec('pgrep -u doom');
$arrtext = preg_split('/\s+/', $text);
for( $i = 1; $i < count($arr); $i++ ) {
echo $i,". PROCESS ID ",$arrtext[$i]," Command issued: ",$arr[$i];
echo '<br>';
}
?>
以下是完整的输出,以供参考:
什么是最简单和最有效的方法来摆脱这一行,我将如何做呢?谢谢。我快速而肮脏的解决方案是将
|grep-v grep
附加到命令。更改此选项:
ps ax --format command | grep skulltag
为此:
ps ax --format command | grep [s]kulltag
这样,grep命令本身包含字符串“[s]kultag”,而grep正则表达式“[s]kultag”不匹配该字符串
还有两条建议:一,。无法保证您最初的ps | grep和后来的pgrep会一致。相反,请使用单个pgrep:
pgrep -afl skulltag
二,。for循环以1开始,这将跳过arr[0]中的进程
您的php可以重写如下内容:
$processes = explode("\n", shell_exec('pgrep -afl skulltag'));
foreach($processes as $i => $process) {
($pid, $command) = explode(' ',$process,2);
echo $i+1,". PROCESS ID ",$pid," Command issued: ",$command;
echo '<br>';
}
$processs=explode(“\n”,shell_exec('pgrep-afl skulltag');
foreach($i=>$process的进程){
($pid,$command)=分解(“”,$process,2);
echo$i+1、“.PROCESS ID”、$pid、“发出的命令:”、$Command;
回声“
”;
}
如果我理解您的要求,那么解决这个问题的标准方法是使用一种与自身不匹配的模式,例如,grep[s]kulltag
“出于某种原因”-这可能是因为您正在运行的命令正在运行,因此它会显示在正在运行的进程列表中。如果您有pgrep
,为什么要重新实现它?修复正则表达式更优雅。
$processes = explode("\n", shell_exec('pgrep -afl skulltag'));
foreach($processes as $i => $process) {
($pid, $command) = explode(' ',$process,2);
echo $i+1,". PROCESS ID ",$pid," Command issued: ",$command;
echo '<br>';
}