进程和线程管理
sched_getattr and sched_setattr
SCML支持的功能:
// 获取“normal”线程的调度策略
sched_getattr(
pid,
attr = {
sched_policy = SCHED_OTHER | SCHED_BATCH | SCHED_IDLE,
sched_flags = 0,
..
},
flags = 0,
);
// 设置“normal”线程的调度策略
sched_setattr(
pid,
attr = {
sched_policy = SCHED_OTHER | SCHED_BATCH | SCHED_IDLE,
sched_flags = 0,
..
},
flags = 0,
);
// 获取实时线程的调度策略
sched_getattr(
pid,
attr = {
sched_policy = SCHED_FIFO | SCHED_RR,
sched_flags = 0,
..
},
flags = 0,
);
// 设置实时线程的调度策略
sched_setattr(
pid,
attr = {
sched_policy = SCHED_FIFO | SCHED_RR,
sched_flags = 0,
..
},
flags = 0,
);
不支持的调度策略:
SCHED_DEADLINE
不支持的调度标志:
SCHED_FLAG_RESET_ON_FORKSCHED_FLAG_RECLAIMSCHED_FLAG_DL_OVERRUNSCHED_FLAG_UTIL_CLAMP_MINSCHED_FLAG_UTIL_CLAMP_MAX
wait4
SCML支持的功能:
// 等待指定的子进程发生状态变化(终止、停止和恢复)
wait4(
pid, wstatus,
options = WNOHANG | WSTOPPED | WCONTINUED | WNOWAIT,
rusage
);
已忽略的选项:
WEXITEDWNOTHREADWALLWCLONE
更多信息请参阅man page。
clone and clone3
SCML支持的功能:
signal_flags = SIGHUP | SIGINT | SIGQUIT | SIGILL |
SIGTRAP | SIGABRT | SIGSTKFLT | SIGFPE |
SIGKILL | SIGBUS | SIGSEGV | SIGXCPU |
SIGPIPE | SIGALRM | SIGTERM | SIGUSR1 |
SIGUSR2 | SIGCHLD | SIGPWR | SIGVTALRM |
SIGPROF | SIGIO | SIGWINCH | SIGSTOP |
SIGTSTP | SIGCONT | SIGTTIN | SIGTTOU |
SIGURG | SIGXFSZ | SIGSYS | SIGRTMIN;
opt_flags =
// Optional flags
//
// Share the parent's virtual memory
CLONE_VM |
// Share the parent's filesystem
CLONE_FS |
// Share the parent's file descriptor table
CLONE_FILES |
// Share the parent's signal handlers
CLONE_SIGHAND |
// Place child in the same thread group as parent
CLONE_THREAD |
// Share the parent's System V semaphore adjustments
CLONE_SYSVSEM |
// Suspend parent until the child exits or calls `execve`
CLONE_VFORK |
// Create a new mount namespace for the child
CLONE_NEWNS |
// Write child `TID` to parent's memory
CLONE_PARENT_SETTID |
// Allocate a `PID` file descriptor for the child
CLONE_PIDFD |
// Set thread-local storage for the child
CLONE_SETTLS |
// Write child `TID` to child's memory
CLONE_CHILD_SETTID |
// Clear child `TID` in child's memory on exit
CLONE_CHILD_CLEARTID |
// Make the child's parent the same as the caller's parent
CLONE_PARENT;
// 创建线程或进程
clone(
fn, stack,
flags = <opt_flags> | <signal_flags>,
func_arg, ..
);
// Create a thread or process with enhanced control by providing structured arguments
clone3(
clone_args = {
flags = <opt_flags>,
..
},
size
);
更多信息请参阅man page。
sched_setscheduler
SCML支持的功能:
// 设置调度策略
sched_setscheduler(pid, policy = SCHED_OTHER | SCHED_BATCH | SCHED_IDLE | SCHED_FIFO | SCHED_RR, param);
不支持的策略或标志:
SCHED_RESET_ON_FORK
更多信息请参阅man page。
waitid
SCML支持的功能:
// 等待子进程改变状态
waitid(
which = P_PID | P_PIDFD | P_PGID | P_ALL,
pid, infop,
options = WNOHANG | WSTOPPED | WCONTINUED | WNOWAIT,
ru
);
已忽略的选项:
WEXITED
更多信息请参阅man page。
ptrace
SCML支持的功能:
// Request that the calling thread should be traced by its parent
ptrace(request = PTRACE_TRACEME, tid, addr, data);
// Resume a ptrace-stopped tracee, optionally injecting a signal
ptrace(request = PTRACE_CONT, tid, addr, data);
Supported requests:
PTRACE_TRACEMEPTRACE_CONT
Additional limitations:
- Only the main thread of a process can act as the tracer
For more information, see the man page.