【问题标题】:exec() not executing the complete command in phpexec()没有在php中执行完整的命令
【发布时间】:2021-05-06 19:37:39
【问题描述】:

我正在编写一个 php 脚本,它使用 linux 上的“ps”命令获取后台进程的详细信息。

ps 命令有各种开关,但我在执行 -o 开关时遇到 exec() 问题

流程

  • 创建一个新的后台进程并获取它的 PID
  • 使用 ps 命令上的 -o 开关拉取进程的具体细节
  • 杀死进程

代码


    function create_and_kill()
    {
        // Create a new background process and get it`s PID
        $process = BackgroundProcess::create("Command Goes here");
        $display = "\nProcess ID: $process";
        sleep(1);

        // Pull specific details of the process using the -o on ps command
        $result = [];
        exec("ps -p $process -o pid,user,%cpu,%mem,start,time,command", $result);
        $display .= "\n\n".implode("\n",$result);
        sleep(1);

        // Kill the process
        $display .= "\n".shell_exec("kill -9 $process");

        return nl2br($display);
    }

结果

进程 ID:17842

PID TTY 时间命令
17842 点/0 00:00:00 php

结果应该是这样的:

进程 ID:17842

PID 用户 %CPU %MEM 开始时间命令
17842 用户名 0.2 0.3 18:27:47 00:00:01 [命令]

我想不知何故只执行了“ps -p $process”,忽略了-o开关和命令的其余部分,php的内置服务器控制台返回这个“sh:2:-o:未找到” .

我尝试将 -p 与 -o 结合起来,所以我这样写:

ps -po 12342 pid,%cpu

还是不行

我需要帮助

【问题讨论】:

  • 您确定$process 变量包含一个数字(pid)吗?
  • @ZoliSzabó 是的,它在第一行显示了进程 ID,结果中还显示了一些信息,表示进程存在
  • 我无法在交互式 php shell 中复制该行为。 ` $结果=[]; exec("ps -p 3781682 -o pid,user,%cpu,%mem,start,time,command", $result); print $result[1];` 渲染3781682 tink 0.2 0.5 Apr 30 00:23:34 /usr/lib/virtualbox/VirtualBox ...您是否设法将; 添加到pid 上?

标签: php linux exec ps


【解决方案1】:

仍然想知道我在评论中所说的话;如果你改变了参数的顺序,你会得到什么?

        exec("ps -o pid,user,%cpu,%mem,start,time,command -p $process", $result);

【讨论】:

  • 你的意思是它在你这边工作得很好?实际上,当我在终端上运行它时它运行良好,但在 exec 中运行,但我将不得不尝试你的建议
  • @IlesanmiOlawaleAdedotun 正如我所说,交互式 php 会话(CLI,php -a,使用变量等)中的代码 sn-p 它按设计工作,对我来说,订单并没有区别。
  • 哇,它成功了,但你认为这没关系吗?
  • 当我首先放置 -o 开关时它起作用了
  • 没关系这里 ...这让我在上面的 cmets 中指出我的问题。您变量中的 PID 是否包含分号?
猜你喜欢
  • 2013-07-28
  • 2011-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-07
  • 2012-08-18
  • 2017-05-06
  • 1970-01-01
相关资源
最近更新 更多