signal 回忆录
太久不用, 都记不太清了.做个记录
#include <signal.h>
void (*signal(int signum, void (*handler))(int)))(int);
kill -l 查看信号
#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid, int sig);
#include <signal.h>
int raise(int sig);
#include <unistd.h>
unsigned int alarm(unsigned int seconds);
#include <unistd.h>
int pause(void);
#include <stdlib.h>
void abort(void);
精准定时任务
#include <sys/time.h>
int getitimer(int which, struct itimerval *curr_value);
int setitimer(int which, const struct itimerval *new_value,
struct itimerval *old_value);
新
#include <signal.h>
int sigqueue(pid_t pid, int sig, const union sigval value);
非POSIX 标准
#include <signal.h>
int sigaction(int signum, const struct sigaction *act,
struct sigaction *oldact);
阻塞
#include <signal.h>
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset));
int sigpending(sigset_t *set));
int sigsuspend(const sigset_t *mask));
sigprocmask()函数能够根据参数how来实现对信号集的操作,操作主要有三种:
SIG_BLOCK 在进程当前阻塞信号集中添加set指向信号集中的信号
SIG_UNBLOCK 如果进程阻塞信号集中包含set指向信号集中的信号,则解除对该信号的阻塞
SIG_SETMASK 更新进程阻塞信号集为set指向的信号集
sigpending(sigset_t *set))获得当前已递送到进程,却被阻塞的所有信号,在set指向的信号集中返回结果。
信号集
typedef struct {
unsigned long sig[_NSIG_WORDS];
} sigset_t;
#include <signal.h>
int sigemptyset(sigset_t *set);
int sigfillset(sigset_t *set);
int sigaddset(sigset_t *set, int signum)
int sigdelset(sigset_t *set, int signum);
int sigismember(const sigset_t *set, int signum);
sigemptyset(sigset_t *set)初始化由set指定的信号集,信号集里面的所有信号被清空;
sigfillset(sigset_t *set)调用该函数后,set指向的信号集中将包含linux支持的64种信号;
sigaddset(sigset_t *set, int signum)在set指向的信号集中加入signum信号;
sigdelset(sigset_t *set, int signum)在set指向的信号集中删除signum信号;
sigismember(const sigset_t *set, int signum)判定信号signum是否在set指向的信号集中。
posted on 2015-07-20 14:40 DayAfterDay 阅读(120) 评论(0) 编辑 收藏 举报