编写一个.c程序,实现如下功能:当前进程每隔1 秒循环显示hello,当该进程接收到SIGINT信号时, 显示该信号的值。 要求:定义一个信号处理函数signalHandler
时间: 2024-10-25 17:04:26 浏览: 26
在C语言中,你可以使用`signal()`函数来捕获和处理信号,如SIGINT(中断信号)。下面是一个简单的示例程序,它创建一个循环打印"hello"的进程,并在接收到SIGINT信号时终止并显示信号值:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
void signalHandler(int signum) {
printf("Received SIGINT with value: %d\n", signum);
exit(0); // 退出进程
}
int main() {
// 注册信号处理器
signal(SIGINT, signalHandler);
while (true) {
printf("Hello, every 1 second...\n");
sleep(1); // 每隔1秒睡眠一次
}
return 0; // 这一行不会被执行,因为信号会提前结束进程
}
```
在这个程序中,我们首先定义了一个名为`signalHandler`的回调函数,当收到SIGINT信号时,这个函数会被调用。然后,在`main`函数中,我们使用`signal()`函数注册了`signalHandler`作为SIGINT信号的处理器。
在`while`循环中,程序不断打印"Hello...",`sleep(1)`让进程暂停1秒。一旦接收到SIGINT信号,`signalHandler`函数将被调用,打印出信号值并使用`exit(0)`退出进程。
运行此程序时,可以使用`Ctrl+C`发送SIGINT信号来查看信号处理效果。
阅读全文