1.进程的创建 编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每个进程在屏幕上显示一句话和进程ID,试观察记录屏幕上的显示结果,并分析原因。
时间: 2024-10-23 20:19:12 浏览: 27
进程的创建编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,
5星 · 资源好评率100%
在Unix/Linux系统下,可以使用`fork()`系统调用来创建新进程。`fork()`函数会返回一个新的进程ID给父进程,对于子进程,它会复制当前进程的所有状态并开始新的执行。以下是一个简单的C语言示例:
```c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#define MAX_LINE_LENGTH 50
int main() {
pid_t child_pid; // 子进程PID
char message[] = "Hello from Process ID: "; // 消息模板
// 父进程操作
if (child_pid = fork()) { // 如果是父进程
if (child_pid > 0) {
printf("Parent process with PID %d\n", getpid());
} else if (child_pid == 0) { // 如果是子进程
printf("%s%d\n", message, getpid()); // 显示消息和自身ID
sleep(1); // 让子进程稍作延时以便观察
}
} else {
printf("Fork failed with error %d\n", errno);
return -1;
}
// 子进程操作
if (child_pid > 0) {
printf("%s%d\n", message, child_pid); // 父进程显示子进程信息
wait(NULL); // 等待子进程结束
}
return 0;
}
```
当你运行这个程序,你会看到如下输出:
1. 父进程显示 "Parent process with PID X"
2. 子进程A显示 "Hello from Process ID: A"(其中A是子进程A的实际ID)
3. 子进程B显示 "Hello from Process ID: B"(其中B是子进程B的实际ID)
这是因为`fork()`在父进程中创建了一个新的进程,然后每个进程都有自己的独立栈空间。每个子进程都打印了自己的ID,而父进程还打印了子进程的ID。
阅读全文