#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
void sigint_handler(int signo) {
printf("收到 SIGINT 信号,进行清理工作...\n");
// 执行清理工作...
// 调用 exit 或者 _exit 来正常或立即退出
// exit(EXIT_SUCCESS);
}
int main() {
// 注册 SIGINT 信号处理函数
if (signal(SIGINT, sigint_handler) == SIG_ERR) {
perror("signal");
exit(EXIT_FAILURE);
}
pid_t pid = fork();
if (pid == -1) {
perror("fork");
exit(EXIT_FAILURE);
} else if (pid == 0) {
// 子进程的代码
printf("子进程 %d 开始执行\n", getpid());
// 子进程执行的工作...
sleep(30);
printf("子进程 %d 执行结束\n", getpid());
// 子进程正常退出
exit(EXIT_SUCCESS);
} else {
// 父进程的代码
printf("等待子进程 %d 结束...\n", pid);
int status;
pid_t child_pid = waitpid(pid, &status, 0);
if (child_pid == -1) {
perror("waitpid");
exit(EXIT_FAILURE);
}
printf("子进程 %d 已经结束\n", child_pid);
printf("父进程结束\n");
}
return 0;
}
signal 处理函数使用
最新推荐文章于 2024-08-14 13:39:50 发布