编写一个.c程序,实现如下功能:当前进程每隔1 秒循环显示hello,当该进程接收到SIGINT信号时, 显示该信号的值。 要求:定义一个信号处理函数signalHandler。
时间: 2024-10-25 20:16:42 浏览: 10
要在.c文件中编写一个程序来实现这个功能,你可以使用POSIX标准库中的`signal()`、`alarm()`和`printf()`函数。下面是一个简单的示例:
```c
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
// 定义信号处理函数
void signalHandler(int signum) {
printf("Received SIGINT with value: %d\n", signum);
alarm(0); // 取消定时器,结束程序
}
int main() {
// 注册信号处理函数
struct sigaction sa;
sa.sa_handler = signalHandler;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
if (sigaction(SIGINT, &sa, NULL) == -1) {
perror("Failed to set up signal handler");
return 1;
}
while (1) {
printf("Hello, from process %d\n", getpid());
sleep(1); // 每隔1秒打印一次
alarm(1); // 设置1秒后的定时器
}
return 0;
}
```
在这个程序中,我们首先注册了一个信号处理器`signalHandler`来处理SIGINT信号。然后在主循环中,每秒打印一次"Hello"并设置一个1秒的定时器,当接到SIGINT信号时,会调用`signalHandler`函数,显示信号值并取消定时器,使得程序退出。
运行此程序前确保有权限捕获和处理信号。如果需要执行此代码,请先保存为`.c`文件,如`main.c`,然后使用`gcc`编译并运行:
```sh
gcc -o hello main.c
./hello
```
阅读全文