程序功能:
signal.c程序接收两个信号,SIGUSR1,SIGUSR2,接收到SIGUSR1之后,执行sig_usr_close函数,打印,并将全局变量m_switch置为0;接收到SIGUSR2之后,执行sig_usr_open函数,打印,并将m_switch置为1。
kill.c程序主要发送两个信号,SIGUSR1,SIGUSR2。
1、信号发送函数-kill()
#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid,int signo)
2、信号接收函数
void (*signal(int signum, void (*handler)(int)))(int);
//signal.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
int m_switch = 1;
void sig_usr_close(int sig);
void sig_usr_open(int sig);
int main()
{
if(signal(SIGUSR1, sig_usr_close) == SIG_ERR)
{
printf("signal error\n");
}
if(signal(SIGUSR2, sig_usr_open) == SIG_ERR)
{
printf("signal error\n");
}
printf("%d\n", getpid());
while(1)
{
if(m_switch == 1)
{
printf("hello\n");
}
sleep(1);
}
return 0;
}
void sig_usr_close(int sig)
{
printf("reveive SIGUSER1\n");
m_switch = 0;
}
void sig_usr_open(int sig)
{
printf("reveive SIGUSER2\n");
m_switch = 1;
}
//kill.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <signal.h>
void kill_usr_close(int pid);
void kill_usr_open(int pid);
int main(int argc)
{
int a;
scanf("%d", &a);
kill_usr_close(a);
sleep(5);
kill_usr_open(a);
return 0;
}
void kill_usr_close(int pid)
{
kill(pid, SIGUSR1);
}
void kill_usr_open(int pid)
{
kill(pid, SIGUSR2);
}
结果:signal函数会收到两次信号,第一次收到信号后,停止打印hello,收到第二次信号后,继续打印hello
参考:https://blog.csdn.net/qq_37192076/article/details/80410065