目录
1.进程间通信概述
2. 信号概述
3. Linux 中的信号
2)SIGINT:按键Ctrl+C,中断信号
3)SIGQUIT:按键Ctrl+\
6)SIGABRT:调用abrt()函数发送的信号,进程异常退出
9)SIGKILL:输入 kill -9 强制杀死一个进程的时候发送的信号
17)SIGCHLD:是子程序运行结束后向父进程发出的信号
4. 信号
5. 信号处理函数
5.1 signal()
//signal.c
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
static void sig_usr(int);
int main(void)
{
int i;
for (i = 1; i < 64; i++)
if (signal(i, sig_usr) == SIG_ERR)
printf("can't catch sig %d\n", i);
if (signal(SIGTSTP, SIG_DFL) == SIG_ERR)
printf("can't catch sig %d\n", i);
if (signal(SIGUSR1, SIG_IGN) == SIG_ERR)
perror("can't catch SIGUSR1");
if (signal(SIGUSR2, sig_usr) == SIG_ERR)
perror("can't catch SIGUSR2");
if (signal(SIGINT, SIG_IGN) == SIG_ERR)
perror("can't catch SIGINT");
for (;;) {
printf("abc\n");
pause();
}
}
static void sig_usr(int signo)
{
if (signo == SIGUSR1)
printf("received SIGUSR1");
else if (signo == SIGUSR2)
printf("received SIGUSR2");
else
printf("received signal %d\n", signo);
}
5.2 kill() 和 ararm()
//kill_test.c
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
int main(int argc, char *argv[])
{
if (argc < 3) {
perror("argc < 3\n");
exit(-1);
}
pid_t pid;
int sig;
pid = atoi(argv[1]);
sig = atoi(argv[2]);
kill(pid, sig);
return 0;
}
//运行测试: ./kill_test 19276 9