在Ubuntu虚拟机上编程完成以下实验,要求使用一个.c文件: 主进程创建三个子进程,每个子进程每隔1秒输出自己的pid信息,10秒后结束;主进程等待全部子进程结束后再结束;上述程序需要编写的makefile进行编译
时间: 2024-12-24 14:19:58 浏览: 14
在Ubuntu虚拟机上编写一个.c文件来完成这个实验,首先我们需要了解几个关键点:
1. 使用`fork()`系统调用来创建子进程。
2. 子进程需要通过`printf()`函数定期输出自己的PID(进程ID),可以利用`time()`或`sleep()`函数配合定时器实现每秒打印一次。
3. 主进程中,可以使用`wait()`或`waitpid()`函数等待所有子进程结束后再退出。
下面是一个简单的.c文件示例,名为`processes.c`:
```c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#define INTERVAL 1000 // 每隔1秒
#define MAX_PROCS 3
void child(int pid) {
for (int i = 0; i < INTERVAL / 1000; i++) {
printf("Child %d PID: %d\n", pid, getpid());
sleep(1);
}
exit(0); // 子进程结束
}
int main() {
int procs[MAX_PROCS];
for (int i = 0; i < MAX_PROCS; i++) {
if (fork() == 0) { // 如果是子进程
child(i);
} else { // 父进程
procs[i] = wait(NULL); // 等待子进程结束
}
}
printf("All children ended, main process exiting.\n");
return 0;
}
```
接下来是对应的Makefile,用于编译该程序:
```makefile
CC = gcc
EXECUTABLE = processes
SOURCES = processes.c
$(EXECUTABLE): $(SOURCES)
$(CC) -o $@ $^
clean:
rm -f $(EXECUTABLE)
.PHONY: clean
```
在这个Makefile里,`CC`变量指定了使用的编译器(默认gcc),`EXECUTABLE`是目标可执行文件名,`SOURCES`是源代码文件列表。`.PHONY`告诉Makefile `clean`规则不需要依赖于实际存在的文件。
要运行这个程序,只需在终端输入`make`然后执行`./processes`即可。
阅读全文