rt_sched.lua
local p = require "posix"
local mypid = p.getpid'pid'
local function get_ps_sched(pid)
local fp = io.popen(('ps --no-headers -o "policy,rtprio" %s'):format(pid))
local res, err = fp:read'*a'
assert(res, err )
fp:close()
local policy, rtprio = res:match'([^%s]+)%s+([^%s]+)'
assert(policy)
assert(rtprio)
return policy, rtprio
end
do
local res, err = p.sched_getscheduler(0) assert(res == p.SCHED_OTHER)
local res, err = p.sched_getscheduler() assert(res == p.SCHED_OTHER)
local policy, rtprio = get_ps_sched(mypid)
assert(policy== 'TS')
assert(rtprio== '-')
local res, err = p.sched_setscheduler(0, p.SCHED_FIFO, 10 )
assert(res, err)
local policy, rtprio = get_ps_sched(mypid)
assert(policy== 'FF')
assert(rtprio== '10')
local res, err = p.sched_getscheduler(0)
assert(res == p.SCHED_FIFO)
local res, err = p.sched_setscheduler(0, p.SCHED_RR, 11 )
assert(res, err)
local policy, rtprio = get_ps_sched(mypid)
assert(policy== 'RR')
assert(rtprio== '11')
local res, err = p.sched_getscheduler(0)
assert(res == p.SCHED_RR)
local res, err = p.sched_setscheduler()
assert(res, err)
local policy, rtprio = get_ps_sched(mypid)
assert(policy== 'TS')
assert(rtprio== '-')
local res, err = p.sched_getscheduler(0)
assert(res == p.SCHED_OTHER)
end
do
local r,w = p.pipe()
local cpid = p.fork()
if cpid == 0 then
p.close(w) local b = p.read(r,1)
p._exit(0)
end
p.close(r)
do local res, err = p.sched_getscheduler(cpid)
assert(res == p.SCHED_OTHER)
local policy, rtprio = get_ps_sched(cpid)
assert(policy== 'TS')
assert(rtprio== '-')
local res, err = p.sched_setscheduler(cpid, p.SCHED_FIFO, 10 )
assert(res, err)
local policy, rtprio = get_ps_sched(cpid)
assert(policy== 'FF')
assert(rtprio== '10')
local res, err = p.sched_getscheduler(cpid)
assert(res == p.SCHED_FIFO)
local res, err = p.sched_setscheduler(cpid, p.SCHED_RR, 11 )
assert(res, err)
local policy, rtprio = get_ps_sched(cpid)
assert(policy== 'RR')
assert(rtprio== '11')
local res, err = p.sched_getscheduler(cpid)
assert(res == p.SCHED_RR)
local res, err = p.sched_setscheduler(cpid)
assert(res, err)
local policy, rtprio = get_ps_sched(cpid)
assert(policy== 'TS')
assert(rtprio== '-')
local res, err = p.sched_getscheduler(cpid)
assert(res == p.SCHED_OTHER)
end
p.write(w,"stop")
p.close(w)
p.wait(cpid)
end