开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 23 天,点击查看活动详情。
一、信号发出函数
-
kill命令和kill函数 -
alarm函数:使用自然计时法 -
setitimer函数 -
int raise(int sig);void abort(void);
二、信号集操作函数
sigset_t set; 自定义信号集。
sigemptyset(sigset_t *set); 清空信号集
sigfillset(sigset_t *set); 全部置1
sigaddset(sigset_t *set, int signum); 将一个信号添加到集合中
sigdelset(sigset_t *set, int signum); 将一个信号从集合中移除
sigismember(const sigset_t *set,int signum); 判断一个信号是否在集合中。 在--》1, 不在--》0
信号集操作
三、设置信号屏蔽字和解除屏蔽
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
how: SIG_BLOCK: 设置阻塞
SIG_UNBLOCK: 取消阻塞
SIG_SETMASK: 用自定义set替换mask。
set: 自定义set
oldset:旧有的 mask。
四、查看未决信号集
int sigpending(sigset_t *set);
set: 传出的 未决信号集。
阻塞信号集和未决信号集
五、信号捕捉
signal();
【sigaction();】 重点!!!
-
信号捕捉特性:
-
捕捉函数执行期间,信号屏蔽字 由 mask --> sa_mask , 捕捉函数执行结束。 恢复回mask
-
捕捉函数执行期间,本信号自动被屏蔽(sa_flgs = 0).
-
捕捉函数执行期间,被屏蔽信号多次发送,解除屏蔽后只处理一次!
借助信号完成 子进程回收。
-
六、守护进程
守护进程定义
daemon进程。通常运行于操作系统后台,脱离控制终端。一般不与用户直接交互。周期性的等待某个事件发生或周期性执行某一动作。
不受用户登录注销影响。通常采用以d结尾的命名方式。
守护进程创建步骤
-
fork子进程,让父进程终止。
-
子进程调用
setsid()创建新会话 -
通常根据需要,改变工作目录位置
chdir(), 防止目录被卸载。 -
通常根据需要,重设umask文件权限掩码,影响新文件的创建权限。 022 -- 755 0345 --- 432 r---wx-w- 422
-
通常根据需要,关闭/重定向 文件描述符
-
守护进程 业务逻辑。
while()