我现在正在学习操作系统课程,并且刚刚被介绍给"fork","execv“这对人。
根据我现在的理解,fork是用来为进程创建一个抽象的,而execv是用来让进程做一些实际的工作。
我的直觉告诉我,这并不是那么简单,而且只使用"fork“而不使用"execv”也有一些实际用途。你能给我举个例子吗?
发布于 2015-03-28 07:48:13
乍一看,拥有一个与它的fork完全相同的子进程似乎没有用考虑到您可以使用if语句来分离它的行为,可以想象使用parent.But ()本身。
如你所知,fork()创建一个新的process.The新进程是原始(父)进程的副本,具有相同的代码和相同的程序计数器,但本质上不同的PCB。
现在让我们看看你正在寻找的例子,在许多情况下,我们可能需要multiprocessing.In这段代码,我们创建了特定数量的进程来为我们做一些工作。
#include<stdio.h>
#include<sys/types.h>
#define PROCESS_NOM 5
int main()
{
pid_t pid; //Or int pid
int i;
for(i = 0; i < PROCESS_NOM; i++)
{
pid = fork();
if(pid == -1)
printf("Error!\n");
else if(pid == 0)
{
//Child process code
//Maybe manipulation data with parent using IPC
//Of course you can call other functions here to execute in child process.
exit(0);
}
//Since we have used exit() function inside if scope, other parts of main function will execute only for parent process.
}
}Fork将新(子)进程的进程id返回给父进程。所以在父进程中,pid在子进程中得到一个正的value.Concurrently,有一个pid变量没有得到任何东西,因为它们没有调用fork(),并将赋值为零。
最后,让我添加this.There还有其他"exec系列“系统调用: execl()、execlp等。所有这些函数都用新的进程映像替换当前的进程映像(内存空间)。
https://stackoverflow.com/questions/29288611
复制相似问题