fork没有execv的例子

时间:2015-03-26 20:50:29

标签: operating-system

我现在正在学习操作系统课程,并且刚刚介绍了“fork”,“execv”对。

至于我现在的理解,fork用于创建进程的抽象,而execv用于使该进程执行一些实际的工作。

我的直觉告诉我,这并不是那么简单,只有在没有“execv”的情况下使用“fork”才有一些实际用途。 你能为我做一个例子吗?

1 个答案:

答案 0 :(得分:1)

乍一看,让子进程与其父进程完全相同似乎没用。但是考虑到你可以使用if语句分离它的行为,可以想象使用fork()本身

如您所知,fork()创建了一个新进程。新进程是原始(父)进程的副本,具有相同的代码和相同的程序计数器,但PCB自然不同。

现在让我们看一下您正在寻找的示例。在许多情况下,我们可能需要进行多处理。在此代码中,我们创建了特定数量的流程来为我们做一些工作。

#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得到一个正值。同时在子进程中,有一个pid变量没有任何内容,因为它们没有调用fork()并将赋值为零。

最后,让我补充一点。还有其他&#34; exec家庭&#34;系统调用:execl(),execlp等。所有这些函数都用新的过程映像替换当前过程映像(内存空间)。