嵌入式Linux系统编程学习之十六用程序发送信号


一、kill 和 raise 信号发送函数

  kill 和 raise 信号的发送函数的原型分别为:

	#include <sys/types.h>
	#include <signal.h>
	int kill(pid_t pid, int sig);

	#include <signal.h>
	int raise(int sig);

  kill 函数向指定进程发送指定信号;
  raise 函数则允许进程向自身发送信号。
  参数 pid 为将要接收信号的进程的 pid,可以通过 getpid() 函数获得;
  参数 sig 为要发送的信号,如果成功,返回 0,否则为 -1。

二、sigqueue 信号发送函数

  sigqueue 也可以发送信号,并且能传递附加的信息,其原型为:

	#include <signal.h>
	int sigqueue(pid_t pid, int sig, const union sigval value);

  参数 pid 为接收信号的进程;
  参数 sig 为要发送的信号;
  参数 value 为一整型与指针类型的共用体:

	union sigval{			//同一时间只能传递一个,因为是共用体
		int		sival_int;	//可以传递整型
		void*	sival_ptr;	//其他类型
	};

  由 sigqueue 函数发送的信号的第 3 个参数 sival_ptr 的值,可以被进程的信号处理函数的第 2 个参数 info->si_ptr 接收到,整型的 sival_int 可以被信号处理函数的第 2 个参数 info->si_int 接收到。

注意:一个进程向另外一个进程发送信号时,发送进程不要将自己进程空间的地址发送给接收进程,因为接收进程接收到地址也访问不到发送进程的地址空间。要用 ps -aux 查看接收端的进程号,然后发送端向该进程号发送数据。(注意:经过验证,发现在不同的进程之间利用 sigqueue 传递数据时,只能传递整型值,传递字符串失败)


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值