signal.h是C/C++语言中的标准库,主要用于处理信号。它定义了一组函数,可以用于接收、发送和处理信号。
1、signal()函数
signal()函数是信号处理函数,用于捕获信号,并执行相应的操作。它的原型如下:
void (*signal(int sig, void (*func)(int)))(int);
它有两个参数:
- sig:表示要捕获的信号,可以是SIGINT、SIGTERM、SIGKILL等。
- func:表示要执行的操作,可以是SIG_IGN、SIG_DFL等。
使用示例:
#include#include void my_handler(int sig) { printf("Received signal %d\n", sig); } int main() { signal(SIGINT, my_handler); while (1); return 0; }
2、raise()函数
raise()函数是发送信号函数,用于发送信号。它的原型如下:
int raise(int sig);
它只有一个参数:
- sig:表示要发送的信号,可以是SIGINT、SIGTERM、SIGKILL等。
使用示例:
#include#include int main() { raise(SIGINT); return 0; }
3、kill()函数
kill()函数是发送信号函数,用于向指定的进程发送信号。它的原型如下:
int kill(pid_t pid, int sig);
它有两个参数:
- pid:表示要发送信号的进程ID。
- sig:表示要发送的信号,可以是SIGINT、SIGTERM、SIGKILL等。
使用示例:
#include#include int main() { kill(12345, SIGINT); return 0; }
4、sigaction()函数
sigaction()函数是信号处理函数,用于捕获信号,并执行相应的操作。它的原型如下:
int sigaction(int sig, const struct sigaction *act, struct sigaction *oact);
它有三个参数:
- sig:表示要捕获的信号,可以是SIGINT、SIGTERM、SIGKILL等。
- act:表示要执行的操作,可以是SIG_IGN、SIG_DFL等。
- oact:表示保存旧的信号处理函数。
使用示例:
#include#include void my_handler(int sig) { printf("Received signal %d\n", sig); } int main() { struct sigaction act; act.sa_handler = my_handler; sigaction(SIGINT, &act, NULL); while (1); return 0; }
5、sigprocmask()函数
sigprocmask()函数是信号屏蔽函数,用于设置进程的信号屏蔽字。它的原型如下:
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
它有三个参数:
- how:表示设置信号屏蔽字的方式,可以是SIG_BLOCK、SIG_UNBLOCK、SIG_SETMASK等。
- set:表示要设置的信号屏蔽字。
- oldset:表示保存旧的信号屏蔽字。
使用示例:
#include#include int main() { sigset_t set; sigemptyset(&set); sigaddset(&set, SIGINT); sigprocmask(SIG_BLOCK, &set, NULL); while (1); return 0; }