繁体   English   中英

普通函数调用和signal()系统调用有什么区别?

[英]What is the difference between normal function call and signal() system call?

在学习signal()系统调用时,我应该遇到以下代码,

#include <stdio.h>
#include <signal.h>
void sigproc(int);
void quitproc(int);

int main(int argc,char **argv)
{
 signal(SIGINT, sigproc); //Is it like a normal Call to signal()?
 signal(SIGQUIT, quitproc);// This too?
 printf("ctrl- c disabled use ctrl\ to quit \n");
 while(1);
 return 0;
}

void sigproc(int signo)
{
printf("you have pressed ctrl - c \n");
}

void quitproc(int signo)
{
  printf("U cant quit\n");
//  exit(0);
}

我在main()中调用函数signal()两次。 但它只在我按下Ctrl-C和Ctrl- \\键时执行。 我认为它也像正常的函数调用。 信号处理函数实际发生了什么?

signal功能建立信号处理程序。 意思是:“ 当我的进程收到此信号时,运行此函数而不是执行默认值 ”。

因此,在您的示例中,对signal的调用不会调用该函数 要实际查看运行中的信号,请执行以下操作:

  • 在一个终端中启动您的流程
  • 从另一个终端:

     kill -INT `pidof proc` 

作为旁注, printf和朋友不是异步信号安全的。 它可能会令人震惊,但在信号处理程序中使用它们并不安全


作为旁注,即使你标记了你的问题Unix ,重要的是要知道信号(和signal函数)是标准的,C的整体部分。信号处理和signal函数在§7.14.1中的C99中描述。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM