exec() 未在 php 中执行完整命令
exec() not executing the complete command in php
我正在编写一个 php 脚本,该脚本使用 linux 上的“ps”命令获取后台进程的详细信息。
ps 命令有各种开关,但我在执行 -o 开关时遇到 exec() 问题
流量
- 创建一个新的后台进程并获取它的 PID
- 使用 -o switch on ps 命令提取进程的具体细节
- 终止进程
代码
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);
}
结果
Process ID: 17842
PID TTY TIME CMD
17842 pts/0 00:00:00 php
结果应该是这样的:
Process ID: 17842
PID USER %CPU %MEM STARTED TIME COMMAND
17842 username 0.2 0.3 18:27:47 00:00:01 [command]
我猜不知何故只执行了“ps -p $process”并忽略了 -o 开关和命令的其余部分以及 php [=50 的内置服务器控制台=] 这个“sh: 2: -o: 未找到”。
我试过结合-p和-o所以我这样写:
ps -po 12342 pid,%cpu
还是不行
我需要帮助
仍然想知道我在评论中说了什么;如果你改变了参数的顺序,你会得到什么?
exec("ps -o pid,user,%cpu,%mem,start,time,command -p $process", $result);
我正在编写一个 php 脚本,该脚本使用 linux 上的“ps”命令获取后台进程的详细信息。
ps 命令有各种开关,但我在执行 -o 开关时遇到 exec() 问题
流量
- 创建一个新的后台进程并获取它的 PID
- 使用 -o switch on ps 命令提取进程的具体细节
- 终止进程
代码
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);
}
结果
Process ID: 17842
PID TTY TIME CMD
17842 pts/0 00:00:00 php
结果应该是这样的:
Process ID: 17842
PID USER %CPU %MEM STARTED TIME COMMAND
17842 username 0.2 0.3 18:27:47 00:00:01 [command]
我猜不知何故只执行了“ps -p $process”并忽略了 -o 开关和命令的其余部分以及 php [=50 的内置服务器控制台=] 这个“sh: 2: -o: 未找到”。
我试过结合-p和-o所以我这样写:
ps -po 12342 pid,%cpu
还是不行
我需要帮助
仍然想知道我在评论中说了什么;如果你改变了参数的顺序,你会得到什么?
exec("ps -o pid,user,%cpu,%mem,start,time,command -p $process", $result);