(7)拓展编程,编写三个程序分别实现屏幕输出100个‘A’、100’B’、100个‘C’,分别编译为A.exe、B.exe、C.exe,编程实现调用3个.exe文件创建3个进程的操作,并能通过输入进程号关闭指定的进程。C语言,英文注释
时间: 2024-10-16 11:20:00 浏览: 19
3流水灯_流水灯_3个流水灯程序_51单片机流水灯_
5星 · 资源好评率100%
在C语言中,我们可以利用fork()和execve()系统调用来实现这个需求。下面是一个简单的例子,它包括了三个子程序(分别是print_A.c, print_B.c 和 print_C.c),主程序main.c,以及一个用于关闭进程的辅助函数close_process.c。
**print_A.c**
```c
#include <stdio.h>
#include <unistd.h>
int main(void) {
// 输出100个'A'
for (int i = 0; i < 100; i++) {
printf("A");
}
return 0;
}
```
**print_B.c**
```c
#include <stdio.h>
#include <unistd.h>
int main(void) {
// 输出100个'B'
for (int i = 0; i < 100; i++) {
printf("B");
}
return 0;
}
```
**print_C.c**
```c
#include <stdio.h>
#include <unistd.h>
int main(void) {
// 输出100个'C'
for (int i = 0; i < 100; i++) {
printf("C");
}
return 0;
}
```
**main.c**
```c
#include <stdlib.h>
#include <stdio.h>
#include "close_process.h"
void execute_program(char *program_name) {
pid_t pid = fork();
if (pid == 0) { // 子进程
execl(program_name, program_name, NULL); // 执行对应程序
perror("execl failed");
exit(1);
} else if (pid > 0) { // 父进程
printf("Process with PID %d started.\n", pid);
} else {
perror("Fork failed");
exit(1);
}
}
int main(int argc, char *argv[]) {
execute_program("print_A"); // 替换为实际的编译后的文件名
execute_program("print_B");
execute_program("print_C");
return 0;
}
```
**close_process.c**
```c
#include <signal.h>
#include <unistd.h>
void close_on_signal(int signum) {
pid_t pid = wait(NULL);
printf("Closed process with PID %d.\n", pid);
kill(pid, SIGTERM); // 安全地结束进程
}
int main(int argc, char *argv[]) {
signal(SIGINT, close_on_signal); // 设置信号处理
while (true) {
sleep(1); // 持续监听信号
}
return 0;
}
```
将上述代码分别编译成.exe文件后,可以在命令行中输入相应的PID来关闭进程:
```bash
./close_process <PID_of_print_A> // 关闭打印A的进程
```
阅读全文