diff options
| author | ruki <[email protected]> | 2020-02-03 22:56:27 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2020-02-07 22:45:56 +0800 |
| commit | 0320b5a0731fca04011d5149a0c7d956033e9140 (patch) | |
| tree | 312d9193ed57a0216c48f6c5863c87cd0335a6e4 /tests/modules/process/sched_process_pipe.lua | |
| parent | cf9970fddd580f8b9bb8ed25d6d9cfa67a607b69 (diff) | |
fix pipe/socket.wait
Diffstat (limited to 'tests/modules/process/sched_process_pipe.lua')
| -rw-r--r-- | tests/modules/process/sched_process_pipe.lua | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/tests/modules/process/sched_process_pipe.lua b/tests/modules/process/sched_process_pipe.lua new file mode 100644 index 000000000..d3690d619 --- /dev/null +++ b/tests/modules/process/sched_process_pipe.lua @@ -0,0 +1,48 @@ +import("core.base.pipe") +import("core.base.bytes") +import("core.base.scheduler") + +function _session_read_pipe(id, rpipeopt) + local results = {} + local pipe = rpipeopt.pipe + print("%s/%d: read ..", pipe, id) + while not rpipeopt.stop do + local real, data = pipe:read(8192) + if real > 0 then + table.insert(results, bytes(data, 1, real)) + elseif real == 0 then + if pipe:wait(pipe.EV_READ, -1) < 0 then + break + end + else + break + end + end + if #results > 0 then + results = bytes(results) + end + print("%s/%d: read ok, size: %d", pipe, id, results:size()) + if results:size() > 0 then + results:dump() + end + pipe:close() +end + +function _session(id, program, ...) + local rpipe, wpipe = pipe.openpair(10) + local rpipeopt = {pipe = rpipe, stop = false} + scheduler.co_start(_session_read_pipe, i, rpipeopt) + local proc = process.openv(program, table.pack(...), {stdout = wpipe}) + local ok, status = proc:wait(-1) + rpipeopt.stop = true + print("%s/%d: %d, status: %d", proc, id, ok, status) + proc:close() + wpipe:close() +end + +function main(program, ...) + for i = 1, 10 do + scheduler.co_start(_session, i, program, ...) + end + scheduler.runloop() +end |
