请编写C语言程序,使用 sigaction 系统调用来更改当前进程处理信号的方式。注意,shell 进程本身可能需要忽略一些信号,但 shell 的子进程仍应以默认操作响应。例如,shell 可以选择忽略 SIGTTOU,但子进程不应该。
时间: 2023-06-02 19:07:46 浏览: 78
关于进程调度的C程序
好的,下面是 C 语言程序的代码:
```c
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
void handler(int sig) {
printf("Received signal %d\n", sig);
}
int main() {
struct sigaction sa;
sa.sa_handler = handler;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
if (sigaction(SIGINT, &sa, NULL) == -1) {
perror("sigaction");
exit(1);
}
while (1) {
printf("Waiting for signal...\n");
sleep(1);
}
return 0;
}
```
此程序使用 `sigaction` 系统调用来更改当前进程处理 `SIGINT` 信号的方式,即注册了一个名为 `handler` 的信号处理函数来处理 `SIGINT` 信号。该程序可以在接收到 `SIGINT` 信号时打印一条消息,并继续等待其他信号的到来。注意,此程序中没有忽略任何信号,因此在子进程中也会默认处理所有信号。
阅读全文