【发布时间】:2015-10-10 11:53:21
【问题描述】:
Michael Kerrisk 的 The Programming Linux Programming Interface 中的以下示例
static void sigHandler(int sig){
printf("Ouch!\n");
}
int main(int argc, char *argv[])
{
int j;
if (signal(SIGINT, sigHandler) == SIG_ERR)
errExit("signal");
for (j = 0; ; j++){
printf("%d\n", j);
sleep(3);
}
}
应该打印“哎哟!”每当用户键入 Control-C (CTRL+C) 时到终端;在作者自己的例子中,他输入了两次,最后用 Control-\ (CTRL+\) 退出了终端。
当我这样做时,程序在仅第一次执行 CTRL+C 时按预期工作。如果我第二次输入它,就像作者在他的示例中所做的那样,我的程序会退出终端 - 它不会打印“哎哟!”它也不会继续运行(循环)。
我在本书的网站上使用了与此处给出的完全相同的代码:
【问题讨论】:
-
注意:至少在标准 C++ 中(在信号处理程序中调用 printf)是未定义的行为
标签: c++ c linux operating-system signals