首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不带execv的fork示例

不带execv的fork示例
EN

Stack Overflow用户
提问于 2015-03-27 04:50:29
回答 1查看 191关注 0票数 1

我现在正在学习操作系统课程,并且刚刚被介绍给"fork","execv“这对人。

根据我现在的理解,fork是用来为进程创建一个抽象的,而execv是用来让进程做一些实际的工作。

我的直觉告诉我,这并不是那么简单,而且只使用"fork“而不使用"execv”也有一些实际用途。你能给我举个例子吗?

EN

回答 1

Stack Overflow用户

发布于 2015-03-28 07:48:13

乍一看,拥有一个与它的fork完全相同的子进程似乎没有用考虑到您可以使用if语句来分离它的行为,可以想象使用parent.But ()本身。

如你所知,fork()创建一个新的process.The新进程是原始(父)进程的副本,具有相同的代码和相同的程序计数器,但本质上不同的PCB。

现在让我们看看你正在寻找的例子,在许多情况下,我们可能需要multiprocessing.In这段代码,我们创建了特定数量的进程来为我们做一些工作。

代码语言:javascript
复制
#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等。所有这些函数都用新的进程映像替换当前的进程映像(内存空间)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29288611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档