【发布时间】: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 上?