4

我的站点有一个自制的“进程管理器”,它只是解析 shell 命令
ps aux | grep php

这对于查看 php 进程是否占用过多 CPU 或 MEM 很有用。但是,有时我会看到一些 php 进程延迟了一些时间才能完成。问题是这并没有告诉我太多:

/usr/bin/php /home/mysite/public_html/process.php

因为,一个进程可能在很大程度上取决于它接收到的 GET 参数。

所以,我的问题是,是否有可能知道 PHP 进程收到了哪些 GET 参数?

谢谢你。

4

4 回答 4

3

proctitle假设您在 Linux 或 BSD 系统上,您可以使用更改 php 进程的名称以包含 GET 查询字符串。

于 2012-07-22T15:48:51.560 回答
0

唯一的问题是 GET 参数仅在通过 Web 服务器而不是从命令行调用时才传递到您的脚本,在您的情况下,您只会获得 ARGS。

你总是可以做一个 grep :

$ ps -auwwwx | grep my_php_script

在命令行脚本中查看 ARG

于 2012-07-22T16:05:46.477 回答
0

如果有人需要回答这个问题,我可以将命令从 apache 服务器发送到 ubuntu 控制台,只需:在 sudoers 文件中添加 www-data 用户权限。

www-数据 ALL=(ALL) NOPASSWD:ALL

并从 php 文件执行命令

$comand2=  shell_exec('sudo -S service cron restart 2>&1' );
echo "<pre> $comand2 $</pre>";
于 2016-02-06T14:32:03.820 回答
0

如果您想通过 ps 在 linux 控制台上查看进度的详细信息,您必须使用proctitle这个 pecl 扩展将为您提供

setproctitle () 函数。

扩展很旧,但即使在 zts 模式下也能正常工作。

如果您使用的是 cli 版本,您可以使用:cli-set-process-title()这是原生 php 函数(版本 PHP5 >=)

我用来在 linux 上跟踪的简单代码:

<?
if ((PHP_SAPI === 'cli' OR defined('STDIN'))) {
    $tmp = $_SERVER["argv"];
    unset($tmp[0]);
    $text =  "/". implode('/',$tmp);
    @cli_set_process_title (urldecode($text));
} else {
    @setproctitle (urldecode($_SERVER["REQUEST_URI"]));
}
?>

我只是把它写到codeigniter上的top index.php。

查看进程在 linux 上使用最多的 cpu 和内存:

ps o pid,stat,time,pcpu,pmem,cmd -C php --sort -pcpu

现在您将能够看到进程

于 2016-10-27T11:48:26.853 回答