Linux的父进程表示子进程异常中断的代码
时间: 2024-02-05 22:12:02 浏览: 91
(修改版)实现进程的软中断通信。要求:使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断
4星 · 用户满意度95%
在Linux中,子进程异常中断时会向父进程发送一个信号。父进程可以通过捕获这个信号来获取子进程异常中断的代码。
常见的子进程异常中断信号是SIGCHLD。父进程可以使用signal()或者sigaction()函数来捕获这个信号,并且在信号处理函数中调用waitpid()函数来获取子进程的退出状态。
下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/wait.h>
void sigchld_handler(int signum) {
int status;
pid_t pid = waitpid(-1, &status, WNOHANG);
if (pid > 0) {
if (WIFEXITED(status)) {
printf("child process %d exited with code %d\n", pid, WEXITSTATUS(status));
} else if (WIFSIGNALED(status)) {
printf("child process %d terminated abnormally with signal %d\n", pid, WTERMSIG(status));
}
}
}
int main() {
pid_t pid = fork();
if (pid == 0) {
// 子进程
exit(123);
} else if (pid > 0) {
// 父进程
signal(SIGCHLD, sigchld_handler);
while (1) {
sleep(1);
}
} else {
// fork失败
perror("fork");
exit(1);
}
return 0;
}
```
在上面的示例代码中,父进程在启动时注册了一个SIGCHLD信号处理函数sigchld_handler(),并且在其中调用waitpid()函数获取子进程的退出状态。在子进程中,我们简单地调用exit()函数退出,并且返回错误码123。当子进程退出时,父进程会收到SIGCHLD信号,并且调用sigchld_handler()函数获取子进程的退出状态,并且输出到控制台上。
阅读全文