#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
volatile int shouldExit = 0;
void handleCtrlC(int signal) {
shouldExit = 1;
}
void childProcess(int i) {
while (!shouldExit) {
printf("Child%d-hello-%d\n", i, i);
fflush(stdout);
sleep(1);
}
printf("Child%d-finished\n", i);
exit(0);
}
int main() {
int n;
printf("请输入子进程数量 (n): ");
scanf("%d", &n);
pid_t child_pids[n];
signal(SIGINT, handleCtrlC);
for (int i = 1; i <= n; i++) {
child_pids[i - 1] = fork();
if (child_pids[i - 1] < 0) {
perror("Fork failed");
exit(1);
} else if (child_pids[i - 1] == 0) { // 子进程
childProcess(i);
}
}
int i = 0; // 父进程的计数变量
while (!shouldExit) {
i++;
printf("Parent-hello-%d\n", i);
fflush(stdout);
sleep(1);
}
// 发送SIGTERM信号以终止子进程
for (int j = 0; j < n; j++) {
kill(child_pids[j], SIGTERM);
}
// 等待子进程结束
for (int j = 0; j < n; j++) {
wait(NULL);
}
printf("Parent-finished\n");
return 0;
}
55555
于 2023-10-28 10:17:00 首次发布