Linux System Programming note 10 —— Signal

来源:互联网 发布:网络会员制营销意义 编辑:程序博客网 时间:2024/06/04 00:45
1. SIGKILL和SIGSTOP不能被忽略
2. Signal Identifiers
<signal.h>
3. Basic Signal Management

#include <signal.h>

typedef void (*sighandler_t)(int);
sighandler_t signal(int signo, sighandler_t handler);

4. Waiting for a Signal, Any Signal
#include <unistd.h>

int pause(void);

5. Mapping Signal Numbers to Strings

extern const char * const sys_siglist[];

#include <signal.h>

void psignal(int signo, const char *msg);
 
#define _GNU_SOURCE
#include  *strsignal(int signo);


6. Sending a Signal

#include <sys/types.h>
#include <signal.h>

int kill(pid_t pid, int signo);

7. Sending a Signal to Yourself
#include <signal.h>

int raise(int signo);

example:
raise(signo) equals to kill(getpid(), signo);

8. Sending a Signal to an Entire Process Group

#include <signal.h>
int killpg(int pgrp, int signo);

example:
killpg(pgrp, signo) equals to kill(-pgrp, signo);

9. Guaranteed-Reentrant Functions
10. Signal Sets
#include <signal.h>

int sigemptyset(sigset_t *set);
int sigfillset(sigset_t *set);
int sigaddset(sigset_t *set, int signo);

int sigdelset(sigset_t *set, int signo);
int sigismember(const sigset_t *set, int signo);

10. More Signal Set Functions
#define  _GNU_SOURCE
#define <signal.h>

int sigisemptyset(sigset_t *set);
int sigorset(sig_set *dest, sigset_t *left, sigset_t *right);
int sigandset(sig_set *dest, sigset_t *left, sigset_t *right);

11. Blocking Signals
#include <signal.h>

int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);

how:
SIG_SETMASK
SIG_BLOCK
SIG_UNBLOCK

12. Retrieving Pending Signals
#include <signal.h>

int sigpending(sigset_t *set);

13. Waiting for a Set of Signals
#include <signal.h>

int sigsuspend(const sigset_t *set);

14. Advanced Signal Management
#include <signal.h>
int sigaction(int signo, const struct sigaction *act,
                  struct sigaction *oldact);

struct sigaction{
     void (*sa_handler)(int);
     void (*sa_sigaction)(int, siginfo_t *, void *);
     sigset_t sa_mask;
     int sa_flags;
     void (*sa_restorer)(void);
};


typedef struct siginfo_t {
     int si_signo;
     int si_errno;
     int si_code;
     pid_t si_pid;
     uid_t si_uid;
     int si_status;
     clock_t si_utime;
     clock_t si_stime;
     sigval_t si_value;
     int si_int;
     void *si_ptr;
     void *si_addr;
     int si_band;
     int si_fd;
};

15. Sending a Signal with a Payload

#include <signal.h>

int sigqueue(pid_t pid,
                  int signo,
                  const union sigval value);

union sigval{
     int sival_int;
     void *sival_ptr;
};




0 0
原创粉丝点击