38 lines
896 B
Plaintext
38 lines
896 B
Plaintext
--:Minify:--
|
|
local kernel = ...
|
|
local signal = {}
|
|
kernel.signal=signal
|
|
|
|
function signal.sigsend(pid, sig)
|
|
if sig<0 or sig>256 then error("EINVAL") end
|
|
local task = kernel.tasks[tostring(pid)]
|
|
if not task then error("ENOENT") end
|
|
if not task.sigq then return end
|
|
task.sigq[#task.sigq+1] = sig
|
|
end
|
|
|
|
function signal.sigcatch(handler)
|
|
local task=kernel.currentTask
|
|
task.sigh=handler
|
|
if not task.sigq then task.sigq={} end
|
|
local handle={
|
|
error="",
|
|
active=true
|
|
}
|
|
if task.sigd then task.sigd.active=false; end
|
|
task.sigd=handle
|
|
return handle
|
|
end
|
|
|
|
function signal.sigignore()
|
|
local task=kernel.currentTask
|
|
task.sigh=nil
|
|
task.sigq=nil
|
|
if task.sigd then task.sigd.active=false end
|
|
task.sigd=nil
|
|
end
|
|
|
|
local s=kernel.syscalls
|
|
s["sigsend"] = signal.sigsend
|
|
s["sigcatch"] = signal.sigcatch
|
|
s["sigignore"] = signal.sigignore |