为什么这段代码没有执行最后一行?
Why is the last line not executed by this code?
int main()
{
alarm(2);
printf("still going\n");
while (1);
printf("should this line be executed?\n");
}
我知道 alarm() 会中断执行,将闹钟设置为关闭并交还。为什么最后一行没有执行?
while (1);
这是一个无限循环。执行永远不会超过这个。
它没有打印出来,因为 while(1);
是一个无限循环。因此,如果没有 alarm()
调用,那将永远 运行。
但是,在您调用 alarm()
两秒后生成的 信号 如果您没有捕捉到它,将导致程序终止。
它不会做的只是导致循环退出和程序继续运行。它将关闭程序,快速智能。
如果您 捕获了信号,但您的捕获函数只是returns,它最终会回到无限循环中。
有关这两种情况的更多详细信息,请检查以下代码:
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
int fired = 0;
void handler (int sig) {
fired = 1;
}
int main (void) {
// signal (SIGALRM, handler);
alarm (2);
printf ("Starting.\n");
while (1) {
if (fired) {
fired = 0;
printf ("Alarm fired.\n");
alarm (2);
}
}
printf ("You will never see this.\n");
return 0;
}
如果您 运行 该代码,它将打印出 Starting
消息,运行 大约两秒钟,然后退出而不打印任何其他内容。那是因为您没有捕捉到信号,所以默认操作只是终止进程。
如果您取消注释对 signal()
的调用(暂时忽略使用 sigaction()
被认为更可取),您将看到 Starting
消息,然后是 Alarm fired
大约每两秒发送一次消息。
那是因为你正在捕捉信号,但在退出时,它returns进入了无限循环。
int main()
{
alarm(2);
printf("still going\n");
while (1);
printf("should this line be executed?\n");
}
我知道 alarm() 会中断执行,将闹钟设置为关闭并交还。为什么最后一行没有执行?
while (1);
这是一个无限循环。执行永远不会超过这个。
它没有打印出来,因为 while(1);
是一个无限循环。因此,如果没有 alarm()
调用,那将永远 运行。
但是,在您调用 alarm()
两秒后生成的 信号 如果您没有捕捉到它,将导致程序终止。
它不会做的只是导致循环退出和程序继续运行。它将关闭程序,快速智能。
如果您 捕获了信号,但您的捕获函数只是returns,它最终会回到无限循环中。
有关这两种情况的更多详细信息,请检查以下代码:
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
int fired = 0;
void handler (int sig) {
fired = 1;
}
int main (void) {
// signal (SIGALRM, handler);
alarm (2);
printf ("Starting.\n");
while (1) {
if (fired) {
fired = 0;
printf ("Alarm fired.\n");
alarm (2);
}
}
printf ("You will never see this.\n");
return 0;
}
如果您 运行 该代码,它将打印出 Starting
消息,运行 大约两秒钟,然后退出而不打印任何其他内容。那是因为您没有捕捉到信号,所以默认操作只是终止进程。
如果您取消注释对 signal()
的调用(暂时忽略使用 sigaction()
被认为更可取),您将看到 Starting
消息,然后是 Alarm fired
大约每两秒发送一次消息。
那是因为你正在捕捉信号,但在退出时,它returns进入了无限循环。