【发布时间】:2011-09-21 07:47:52
【问题描述】:
我正在尝试做一个服务器管理器,这是我目前所拥有的:
<?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>';
}
?>
如您所见,我将 $COMMAND 字符串与 ./(文件执行)分开。但是,出于某种原因,列表末尾有这样的内容:
sh -c ps ax --format command | grep skulltag grep skulltag
这是完整的输出供参考:
- PROCESS ID 4793 命令发出:skulltag-server
- PROCESS ID 4956 命令发出:skulltag-server -port 13000
- PROCESS ID 4958 命令发出:skulltag-server -port 13001 sh -c ps ax --format 命令 | grep 骷髅标签 grep 骷髅标签
摆脱这条线的最简单和最有效的方法是什么,我该怎么做?谢谢。
【问题讨论】:
-
如果我明白你在问什么,典型的解决方案是使用与自身不匹配的模式,例如
grep [s]kulltag. -
“出于某种原因”——那是因为您正在运行的命令正在运行,所以它显示在正在运行的进程列表中。
-
如果你有
pgrep,为什么要重新实现它?