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)




  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啊飞飞飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值