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指向的信号集中。

原文地址:https://www.cnblogs.com/banwhui/p/4661396.html