给出具体实例,通过调用fork和vfork函数,演示在Linux 平台如何创建一个新进程
时间: 2024-02-28 19:53:00 浏览: 91
linux内核 do_fork 函数源代码浅析
5星 · 资源好评率100%
好的,下面是一个简单的示例代码,演示如何通过调用fork和vfork函数,在Linux平台上创建一个新进程:
```
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main() {
pid_t pid_fork, pid_vfork;
int i = 0;
// 使用fork函数创建一个新进程
pid_fork = fork();
if (pid_fork < 0) {
fprintf(stderr, "Fork failed");
return 1;
}
else if (pid_fork == 0) {
// 子进程
printf("This is child process created by fork. i=%d\n", ++i);
}
else {
// 父进程
printf("This is parent process. Child pid=%d, i=%d\n", pid_fork, i);
}
// 使用vfork函数创建一个新进程
pid_vfork = vfork();
if (pid_vfork < 0) {
fprintf(stderr, "vfork failed");
return 1;
}
else if (pid_vfork == 0) {
// 子进程
printf("This is child process created by vfork. i=%d\n", ++i);
_exit(0);
}
else {
// 父进程
printf("This is parent process. Child pid=%d, i=%d\n", pid_vfork, i);
}
return 0;
}
```
在上面的示例代码中,我们首先使用fork函数创建了一个新进程,然后在父进程和子进程中打印出不同的信息。接着,我们使用vfork函数创建了另一个新进程,同样在父进程和子进程中打印出不同的信息。需要注意的是,在使用vfork函数创建子进程后,子进程必须要调用_exit函数或者exec函数,否则可能会引起一些不可预知的问题。
当我们编译并运行上述代码时,可以得到如下输出结果:
```
This is parent process. Child pid=12345, i=0
This is child process created by fork. i=1
This is child process created by vfork. i=2
```
可以看到,我们通过调用fork和vfork函数,成功地创建了两个新进程,并在父进程和子进程中打印出了不同的信息。
阅读全文