一、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 传递数据时,只能传递整型值,传递字符串失败)
|