linux signal(),linux sign

  linux signal(),linux sign

  存储数据类型(*函数指针名)(参数表);

  存储类型一般不写,使用默认形式。您可以选择自动类型、静态类型和外部类型等。Type是指针所指函数返回值的数据类型。参数表是指向函数的参数表。

  说明另一个函数的返回值是函数指针的定义形式(可以理解为这个函数A实际返回的是另一个函数B的指针):

  存储数据类型(*函数名(参数表1))(参数表2);

  头文件#包含信号. h

  工作能量:

  设置信号的相应动作。

  功能原型:

  void (*signal(int signum,void(* handler)(int)))(int);

  或者:typedef void(* SIG _ t)(int);sig_t信号(int signum,sig_t处理程序);

  参数描述:

  第一个参数signum表示要处理的信号类型,它可以接受除SIGKILL和SIGSTOP之外的任何信号。

  第二个参数处理程序描述与信号相关的动作。它可以采用以下三个值:

  (1)具有正返回值的函数地址。这个函数必须在调用signal()之前声明,signal()是这个函数在handler中的名字。当接收到sig类型的信号时,执行handler指定的函数。这个函数应该用下面的形式定义:int func(int SIG);Sig是传递给它的唯一参数。在执行signal()调用后,func()函数将在收到sig类型的信号后立即被进程执行,而不管它正在执行程序的哪一部分。当func()函数完成执行时,控制权返回到进程被中断的点并继续执行。

  (2)sigIGN表示该信号被忽略。在发出相应的signal()调用后,进程将忽略SIG类型的信号。

  (3)符号3)SIGDFL表示恢复系统对信号的默认处理。

  函数描述:signal()会根据参数signum指定的信号号来设置信号处理函数。当指定的信号到达时,它将跳转到由参数处理程序指定的函数的执行。当一个信号的信号处理功能被执行时,如果进程再次接收到该信号,该信号将被自动存储,而不会中断信号处理功能的执行,然后相应的处理功能将被再次调用,直到信号处理功能结束。然而,如果进程在信号处理功能执行时接收到其他类型的信号,则该功能的执行将被中断。

  返回值:返回上一个信号处理函数指针,如果有错误返回SIG_ERR(-1)。

  注意:信号跳转到自定义处理程序处理功能后,系统会自动将该处理功能切换回原来系统预设的处理模式。如果要更改此操作,请改用sigaction()。

  下列情况会产生信号:

  1.按CTRL+C生成SIGINT。

  2.硬件中断,比如被0除,非法内存访问(SIGSEV)等等。

  3.kill函数可以向进程发送一个信号

  4.杀戮指令。实际上,它是Kill函数的包装器。

  5.软件中断。例如,当闹钟超时时(SIGURG),当读取器停止向管道写入数据时(SIGPIPE),等等。

  2个信号:

  父进程响应

  当进程终止或停止时,SIGCHLD将被发送给它的父进程。默认情况下,该信号被忽略。

  1.不要用低级或者STDIO。高IO功能。2.不要使用结对运算。3.不要进行系统调用。4.不是浮点信号就不要用longjmp 5。信号函数是由ISO C定义的,由于ISO C不涉及多进程、进程组和终端I/O,所以它对信号的定义非常模糊,对于UNIX系统几乎没有用处。注意:因为singal的语义与现实相关,所以最好用sigaction函数代替这个函数。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: