sigqueue函数

作者: 奥斯特洛司机 | 来源:发表于2019-03-28 15:00 被阅读0次

除了发信号,还会发附加信息。kill函数的扩展。

int sigqueue(pid_t pid, int sig,
const union sigval value);
向pid进程发送sig信号,附加value值(整数或指针)。
成功返回0,失败返回-1.

注意:sigqueue函数对不可靠信号不做排队,会丢失信号。kill知识单纯的递送,对谁都不排队。

|#include <stdio.h>
|#include <signal.h>
|#include <unistd.h>
|#include <sys/wait.h>

void siginfo(int signum, siginfo_t* si, void* pv){
printf("收到了%u进程的%d信号,这个信号的附加值%d\n",getpid(),
si->si_pid,signum, si->si_value.sival_int);
usleep(100);
}

int main(void){
int signum = 50;
stuct sigaction act = {};
act.sa_sigaction = siginfo;
act.sa_flags = SA_SIGINFO | SA_RESTART; //系统调用重新执行
if(sigaction(signum , &act, NULL) == -1){
perror("sigaction");
return -1;
}
pid_t pid = fork();
if(pid == -1){
perror("fork");
return -1;
}
if(pid == 0 ){
pid_t ppid = getppid();
int i;
for(i = 0;i<10;++i){
sigval_t sv;
sv.sival_int = i;
printf("%u进程:向%u进程发送%d信号(附加值=%d)...\n", getpid(),
ppid, signum,sv.sival_int );
if(sigqueue(ppid, signum, sv) == -1){
perror("sigqueue");
return -1;
}
}
printf("%u进程:我将结束\n",getpid());
return 0;
}
if((pid = wait(0)) == -1){ //回收僵尸
perror("wait");
return -1;
}
printf("%u进程:我将结束\n",getpid());
return 0;
}

相关文章

  • sigqueue函数

    除了发信号,还会发附加信息。kill函数的扩展。 int sigqueue(pid_t pid, int sig,...

  • struct sigaction

    主要在sigaction信号安装sigqueue信号发送时会用到。 struct sigaction { vo...

  • Excel(三)

    AND函数 OR函数 NOT函数 IF函数 频率分析函数FREQUENCY

  • if、else if、for、while、repeat函数

    ①if函数 ②else if函数 ③for函数 ④while函数 ⑤repeat函数

  • strsplit、mapply、paste、match函数

    strsplit函数 mapply函数 strsplit函数 mapply函数 paste函数 match函数 第...

  • Oracle中常用函数(SQL)

    Oracle函授有以下几个分类:数字函数、字符函数、日期函数、转换函数、集合函数、分析函数 数字函数: 字符函数:...

  • MySQL函数

    字符函数 数字运算函数 比较运算符和函数 日期时间函数 信息函数 聚合函数 加密函数 流程函数

  • BI-SQL丨AND & OR & IN

    AND函数 & OR函数 & IN函数 AND函数、OR函数和IN函数都可以理解是WHERE函数的补充,当然也可以...

  • Python之函数

    课程大纲 函数定义 函数的参数 函数的返回值 高阶函数 函数作用域 递归函数 匿名函数 内置函数 函数式编程 将函...

  • 函数基本知识

    函数 函数的定义: def 函数名() 函数的调用:函数名() #不能将函数调用放在函数定义上方 函数的文档注...

网友评论

    本文标题:sigqueue函数

    本文链接:https://www.haomeiwen.com/subject/yysqbqtx.html