projects
/
project
/
luci.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
acd7248
)
libs/sys: fix luci.sys.processes.list() for entries with spaces i nthe STAT column...
author
Jo-Philipp Wich
<jow@openwrt.org>
Fri, 11 Jan 2013 18:16:26 +0000
(18:16 +0000)
committer
Jo-Philipp Wich
<jow@openwrt.org>
Fri, 11 Jan 2013 18:16:26 +0000
(18:16 +0000)
libs/sys/luasrc/sys.lua
patch
|
blob
|
history
diff --git
a/libs/sys/luasrc/sys.lua
b/libs/sys/luasrc/sys.lua
index
825092f
..
18622da
100644
(file)
--- a/
libs/sys/luasrc/sys.lua
+++ b/
libs/sys/luasrc/sys.lua
@@
-695,38
+695,29
@@
end
function process.list()
local data = {}
local k
function process.list()
local data = {}
local k
- local ps = luci.util.execi("top -bn1")
+ local ps = luci.util.execi("
/bin/busybox
top -bn1")
if not ps then
return
end
if not ps then
return
end
- while true do
- local line = ps()
- if not line then
- return
- end
-
- k = luci.util.split(luci.util.trim(line), "%s+", nil, true)
- if k[6] == "%VSZ" then
- k[6] = "%MEM"
- end
- if k[1] == "PID" then
- break
- end
- end
-
for line in ps do
for line in ps do
- local row = {}
-
- line = luci.util.trim(line)
- for i, value in ipairs(luci.util.split(line, "%s+", #k-1, true)) do
- row[k[i]] = value
- end
+ local pid, ppid, user, stat, vsz, mem, cpu, cmd = line:match(
+ "^ *(%d+) +(%d+) +(%S.-%S) +([RSDZTW][W ][<N ]) +(%d+) +(%d+%%) +(%d+%%) +(.+)"
+ )
- local pid = tonumber(row[k[1]])
- if pid then
- data[pid] = row
+ local idx = tonumber(pid)
+ if idx then
+ data[idx] = {
+ ['PID'] = pid,
+ ['PPID'] = ppid,
+ ['USER'] = user,
+ ['STAT'] = stat,
+ ['VSZ'] = vsz,
+ ['%MEM'] = mem,
+ ['%CPU'] = cpu,
+ ['COMMAND'] = cmd
+ }
end
end
end
end