提升信号并在C中使用处理程序

时间:2012-03-10 21:30:13

标签: c handler signals

我有一个程序,我需要使用信号和处理程序。我有两个子进程应该接收用户定义的信号,一个应该对信号什么都不做,而另一个应该打印出一些通用消息,睡眠,然后打印出另一条消息,表明停止已经结束。对信号无效的一个子进程应该是提升信号的进程。

我很确定信号是用符号signal(SIGINT, handler);上升的,所以我只是把它放在由一个子进程定义的函数中,但是如何将信号“发送”到两个进程?如何在一组条件下说一个进程接收到信号并执行处理程序告诉的内容而另一个进程收到信号并且什么都不做?

我正在阅读kill(pid, handler)如何能够将指定的进程发送到处理程序,但每当我尝试它时,它告诉我kill的参数1在没有强制转换的情况下从指针生成整数。

我的程序是一个读者/作者程序,它几乎没有明确的目的来测试概念,而且现在,所有这些都在一个源文档中,但是将被拆分为读取器源以定义读取器进程的功能, writer source,它将定义writer进程的功能,然后是创建两个子进程的主要源。我还将有一个头文件,它将定义所有必要的常量和函数原型,但是现在,如果我能从这一个源中获得它,我可以稍后弄清楚如何将它分成多个源。

1 个答案:

答案 0 :(得分:1)

这个答案是基于我对GNU C Manual's chapter on signals的解读。

就像Kerrek所说,signal()允许进程向操作系统注册,该进程希望操作系统向其提供感兴趣的信号。一旦生成了信号,signal()的sighandler_t参数指定进程将执行的操作,默认处理(SIG_DFL),忽略信号(SIG_IGN),或者传递给signal的处理函数定义的自定义内容( )。该处理函数用于定义一个进程的行为,以便在将信号传递给它时对其执行某些操作。

第二个进程的工作是在一段sleep()之后提升指定的信号,所以它将使用kill(pid,signum)函数这样做,它将预期接收者的PID和信号传递给收件人说。