Linuxc 信号的使用1 kill和signal函数

1.进程A向进程B发送SIGUSR1信号;
2.进程B收到信号后,打印字符串“receive SIGUSR1”;
3.要求用kill函数和signal函数实现以上功能;

源代码:
kill.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <signal.h>
void kill_usr(int pid);
int main(int argc)
{
 int a;
 printf("请输入要接收信号的pid\n");
 scanf("%d",&a);
 kill_usr(a);
 return 0;
}
void kill_usr(int pid)
{
 kill(pid,SIGUSR1);
}


signal.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
void sig_usr(int sig);
int main()
{
 if(signal(SIGUSR1,sig_usr)==SIG_ERR)
 {
  printf("signal error");
 }
  printf("%d\n",getpid());
 pause();
 return 0;
}
void sig_usr(int sig)
{
 printf("receive SIGUSR1\n");
}


1.信号发送函数—kill()
#include <sys/types.h> #include <signal.h> int kill(pid_t pid,int signo) 
功能
向进程或进程组发送一个信号 (成功返回 0; 否则,返回 -1 )
参数说明
pid:接收信号的进程(组)的进程号
pid>0:发送给进程号为pid的进程
pid=0:发送给当前进程所属进程组里的所有进程
pid=-1:发送给除1号进程和自身以外的所有进程
pid<-1:发送给属于进程组-pid的所有进程
signo:发送的信号
Signo = 0:不发送信号,可用于检查目标进程是否存在,以及当前进程是否具有向目标进程发送信号的权限(root权限的进程可以向任何进程发送信号,非root权限的进程只能向属于同一个session或者同一个用户的进程发送信号)。


2.信号安装函数—signal()
原型定义
void (*signal(int signum, void (*handler)(int)))(int);
参数说明
signum:需要安装的信号
handler:与安装信号相关的处理函数,可以是SIG_IGN或SIG_DFL
SIG_IGN:忽略该信号
SIG_DFL:执行默认操作函数
返回值
成功时,返回新安装信号处理函数handler的返回值
失败时,返回SIG_ERR
底层系统调用
sys_signal(int sig,  __sighandler_t handler)




猜你喜欢

转载自blog.csdn.net/qq_37192076/article/details/80410065