POSIX 必需的信号 作业控制信号 内存保护信号 kill sigemptyset sigaction sigpending sigsuspend sleep pause sigqueue alar
信号
// <signal.h> -> 
// /usr/include/x86_64-linux-gnu/bits/sigaction.h
/* Structure describing the action to be taken when a signal arrives.  */
struct sigaction
  {
    /* Signal handler.  */
#if defined __USE_POSIX199309 || defined __USE_XOPEN_EXTENDED
    union
      {
	/* Used if SA_SIGINFO is not set.  */
	__sighandler_t sa_handler;
	/* Used if SA_SIGINFO is set.  */
	void (*sa_sigaction) (int, siginfo_t *, void *);
      }
    __sigaction_handler;
# define sa_handler	__sigaction_handler.sa_handler
# define sa_sigaction	__sigaction_handler.sa_sigaction
#else
    __sighandler_t sa_handler;
#endif
    /* Additional set of signals to be blocked.  */
    __sigset_t sa_mask;
    /* Special flags.  */
    int sa_flags;
    /* Restore handler.  */
    void (*sa_restorer) (void);
  };
// /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h
#ifndef __sigset_t_defined
#define __sigset_t_defined 1
#include <bits/types/__sigset_t.h>
/* A set of signals to be blocked, unblocked, or waited for.  */
typedef __sigset_t sigset_t;
#endif
// /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h
#ifndef ____sigset_t_defined
#define ____sigset_t_defined
#define _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int)))
typedef struct
{
  unsigned long int __val[_SIGSET_NWORDS];
} __sigset_t;
#endif
  必需的信号
  
  | 符号常量 | 描述 | 
| SIGABRT | 非正常终止信号 | 
| SIGALRM | 超时信号 | 
| SIGFPE | 错误运算操作 | 
| SIGHUP | 控制中断所检测到的挂断 | 
| SIGILL | 无效硬件信号的检测 | 
| SIGINT | 交叉式信号 | 
| SIGKILL | 终止信号 | 
| SIGPIPE | 写信号 | 
| SIGQUIT | 交互式终止信号 | 
| SIGSEGV | 无效内存引用检测信号 | 
| SIGTERM | 终止信号 | 
| SIGUSR1 | 保留信号 | 
| SIGUSR2 | 保留信号 | 
作业控制信号
| 符号常数 | 描述 | 
| SIGCHLD | 子进程终止或停止 | 
| SIGCONT | 停止后继续 | 
| SIGSTOP | 停止信号 | 
| SIGTSTP | 交互式的停止信号 | 
| SIGTTIN | 从控制终端读 | 
| SIGTTOU | 写到控制终端 | 
内存保护信号
| 符号常数 | 描述 | 
| SIGBUS | 获取内存中不确定的部分 | 
   每一个进程有一个进程标记( process mask),它定义了一组产生但被阻塞传递的信号集
  
送一个信号到进程:
#include <sys/types.h>
#include <signal.h>
/*
 *发送一个信号到一个由 pid 指明的 进程或 进程组
 *sig :标志了信号类型,其值是 0 或 上表中的值
 *成功:0
 *失败:1
 */
int kill(pid_t pid, int sig);  操纵信号集
#include <signal.h>
/*
 *sigsetops 源语操纵信号集
 *操作以数字为对象,数据由应用程序的地址所指向
 */
int sigemptyset(sigset_t *set);
int sigfillset(sigset_t *set);
int sigaddset(sigset_t *set, int signo);
int sigdelset(sigset_t *set, int signo);
nt sigsemeber(const sigset_t *set, int signo);  检测和更改信号的行为
#include <signal.h>
/*
 *调用函数检查与确定的信号相联系的行为
 * sig: 信号
 * act:采取的行为
 * oact != NULL, 先前与信号相联系的行为将被存储到由 oact 指向的地方
 */
int sigaction(int sig, const struct sigaction *act, struct sigaction *oact);  检查和改变阻塞信号
#include <signal.h>
/*
 *检查和改变调用进程的信号标记(signal mask)
 *set != null,它指向一个信号集的用于改变当前的阻塞集
 *how :指明了改变方式
 *oset != null,先前的信号标记被存储在它所指向的地方
 *set = null,则how 没有意义,而且 进程的信号标记不能随函数调用而改变
 */
int sigprocmask(int how, xonst sigset_t *set, sigset_t *oset);  检查未定的信号
#include <signal.h>
/*
 *存储一个信号集,这些信号是在被调用进程传输和未定的情况下阻塞
 * set : 指向
 */
int sigpending(sigset_t *set);  等待一个信号
#include <signal.h>
/*
 *sigmask:所指向的信号集取代了进程信号标记(signal mask)
 *挂起该进程直到接受到一个信号,行为:执行信号跟踪功能或 终止该进程
 */
int sigsuspend(const sigset_t *sigmask);  同步接受一个信号
#include <signal.h>
/*
 *从 set 所确定的信号集中选择一个未定的信号出来
 * 成功:返回一个信号数
 * 失败:返回 -1
 */
int sigwaitinfo(const sigset_t *set, siginfo_t *info);
int sigtimedwait(const sigset_t *set, siginfo_ *info, const struct timespec *timeout);  排队一个信号到进程
#include <signal.h>
/*
 * 由 signo 确定的信号将参数 value 所确定的值发送到由 pid 指明的进程中去
 */
int sigqueue(pid_t pid, int signo, const union_sigval value);  定时器操作
调度警报
//seconds 指定的一段实时时间过去后,该函数将发送一个 SIGALRM 信号到调用进程
unsigned int alarm(unsigned int seconds);  挂起进程的执行
/*
 *挂起一个调用进程直到得到一个信号,这个信号或 执行信号跟踪功能或 终止该进程
 *终止进程,该函数不返回
 *执行信号跟踪功能,则该函数在信号跟踪函数返回后 也要返回
 */
int pause(void);  延迟进程的执行
/*使当前进程从执行状态转化为 挂起状态
 * 直到参数 seconds 所指定的一段实时时间过去后,
 * 或 一个唤醒信号跟踪功能或终止进程功能的信号到来
 *挂起时间由于系统的其他调度活动可能会比要求的时间长
 */
unsigned int sleep(unsigned int seconds);  

