2 changed files with 108 additions and 0 deletions
@ -0,0 +1,42 @@ |
|||
use "files" |
|||
use "glob" |
|||
|
|||
class ProcessHandler |
|||
let env : Env |
|||
|
|||
new ref create(env' : Env) => |
|||
env = env' |
|||
|
|||
fun apply(path : FilePath, |
|||
entries' : Array[String] ref) => |
|||
this.env.out.write(path.path + "\n") |
|||
match OpenFile(path) |
|||
| let file: File => |
|||
while file.errno() is FileOK do |
|||
this.env.out.write(file.read(1024)) |
|||
end |
|||
else |
|||
None |
|||
end |
|||
|
|||
class ProcessStatus |
|||
fun getProcesses(cap : AmbientAuth, env : Env) => |
|||
let glob = Glob.create() |
|||
|
|||
try |
|||
let proc_dir = FilePath(cap, "/proc")? |
|||
|
|||
glob.iglob(proc_dir, "[1-9][0-9]*/stat", ProcessHandler.create(env)) |
|||
else |
|||
None |
|||
end |
|||
None |
|||
|
|||
actor Main |
|||
new create(env : Env) => |
|||
let procstat = ProcessStatus.create() |
|||
try |
|||
procstat.getProcesses(env.root as AmbientAuth, env) |
|||
else |
|||
None |
|||
end |
@ -0,0 +1,66 @@ |
|||
use "itertools" |
|||
use "files" |
|||
|
|||
class ProcessHandler |
|||
let env : Env |
|||
|
|||
new ref create(env' : Env) => |
|||
env = env' |
|||
|
|||
fun isNumeric(st : String) : Bool => |
|||
try |
|||
if st.at_offset(0)? == 48 then |
|||
return false |
|||
end |
|||
end |
|||
Iter[U8](st.values()).all({ (c) => (c >= 48) and (c <= 57) }) |
|||
|
|||
fun apply(path : FilePath, entries : Array[String] ref) => |
|||
let new_entries : Array[String] ref = entries.clone() |
|||
let i : USize = 0 |
|||
for f in new_entries.values() do |
|||
if not isNumeric(f) then |
|||
try |
|||
entries.delete(i)? |
|||
else |
|||
None |
|||
end |
|||
end |
|||
i.add(1) |
|||
end |
|||
|
|||
if path.path == "/proc" then |
|||
return None |
|||
end |
|||
|
|||
try |
|||
let status = path.join("stat")? |
|||
this.env.out.write(path.path + "\n") |
|||
match OpenFile(status) |
|||
| let file: File => |
|||
while file.errno() is FileOK do |
|||
this.env.out.write(file.read(1024)) |
|||
end |
|||
else |
|||
None |
|||
end |
|||
end |
|||
|
|||
class ProcessStatus |
|||
fun getProcesses(cap : AmbientAuth, env : Env) => |
|||
try |
|||
let proc_dir = FilePath(cap, "/proc")? |
|||
proc_dir.walk(ProcessHandler.create(env)) |
|||
else |
|||
None |
|||
end |
|||
None |
|||
|
|||
actor Main |
|||
new create(env : Env) => |
|||
let test = ProcessStatus.create() |
|||
try |
|||
test.getProcesses(env.root as AmbientAuth, env) |
|||
else |
|||
None |
|||
end |
Loading…
Reference in new issue