当前位置:嗨网首页>书籍在线阅读

23-发送带附加信息(payload)的信号

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

10.6.3 发送带附加信息(payload)的信号

正如我们前面所看到的,以SA_SIGINFO标志注册的信号处理程序传递了一个siginfo_t参数。该结构体包含了一个名为si_value的字段,该字段可以让信号产生者向信号接受者传递一些附加信息。

由POSIX定义的sigqueue()函数,允许进程发送带附加信息的信号:

505.png sigqueue()的运行方式和kill()很类似。成功时,由signo表示的信号会被添加到由pid指定的进程或进程组的队列中,并返回0。信号的附加信息是由数值给定的,它是一个整数和void指针的联合:

506.png 失败时,该调用返回-1,并将errno设置为以下之一:

EAGAIN

调用的进程对入队的信号达到上限。

EINVAL

由signo指定的信号无效。

EPERM

调用进程缺乏足够的权限给任何指定的进程发送信号。发送信号的权限要求和kill()是一样的(见10.3节)。

ESRCH

由pid指定的进程或进程组不存在,或者进程是一个僵尸进程。

对于kill()调用,可以给signo传递空信号值(0),来测试权限。