1.在Linux系统中用C语言编程创建两个进程。子进程每隔1秒打印 个数字,从0开始,每秒加1, 直打印到20结束。父进程先休 眠10秒,然后每隔2秒打印一次自己的真实姓名,共打印5次后父 进程退出。如果进程创建失败C,打印“fork failed”并退出。
时间: 2024-12-22 15:24:34 浏览: 12
在Linux系统中,使用C语言编程创建两个进程可以利用`fork()`和`waitpid()`函数。首先,让我们分步骤描述这个程序的设计:
1. **父进程部分**:
- 使用`fork()`创建子进程:尝试调用`if (fork() < 0) { perror("fork failed"); exit(EXIT_FAILURE); }`,如果fork失败则输出错误信息并退出。
- 父进程设置休眠时间:`sleep(10)`,让其等待10秒钟。
- 创建循环打印自身名字:`for (int i = 0; i < 5; i++)`,每次循环间隔2秒,调用`printf("Parent Process Name\n")`。
- 退出父进程:`exit(EXIT_SUCCESS)`。
2. **子进程部分**:
- 子进程中,首先检查是否为父进程:`if (fork() == 0) { ... } else { wait(NULL); }`,如果是,则执行下面的操作。
- 设置定时器:通过`time_t start_time = time(NULL)`获取当前时间,然后在每个循环中更新时间,确保每隔1秒打印一次。
- 循环计数:`for (int j = 0; j <= 20; j++)`,打印数字0到20,每次增加1。
- 控制打印停止:当计数达到20或时间超过1秒时,使用`if (j == 20 || time(NULL) - start_time >= 1)`条件结束循环。
下面是伪代码形式:
```c
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#include <errno.h>
void print_num(int num) {
printf("%d\n", num);
}
void print_parent_name() {
printf("Parent Process Name\n");
}
int main() {
if (fork() < 0) {
perror("fork failed");
exit(EXIT_FAILURE);
}
// Parent process
if (fork() == 0) {
for (int i = 0; i < 5; i += 2) {
sleep(i); // 每隔2秒调用
print_parent_name();
}
exit(EXIT_SUCCESS);
}
// Child process
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
int j = 0;
while (true) {
time_t current_time = time(NULL);
if (j > 20 || current_time - ts.tv_sec > 1) break;
print_num(j++);
nanosleep(&ts, NULL); // 睡眠1秒,调整为实际需要的精度
}
return 0;
}
```
阅读全文