#include
#include
#include
#include
void sigint_handler(int signo) {
printf("收到 SIGINT 信号,进行清理工作...\n");
}
int main() {
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;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56