操作系统中的新进程创建(Unix)

时间:2017-06-15 16:02:33

标签: c unix fork

如果我的问题看起来很愚蠢,我很抱歉。我有一个关于操作系统中新进程创建的查询。请考虑以下简单的C代码:

//hello.c
#include <stdio.h>

int main()

    {
        printf("Hello World\n");
        return 0;
    }

何时使用gcc编译。

gcc hello.c

现在执行可执行文件a.out

./a.out

现在我不明白在这种情况下如何创建New Process,调用fork()exec系统调用,which process is duplicated调用a.out作为孩子处理?在this example中,父进程显式调用fork系统调用来创建子进程,但在上面的hello.c代码中没有fork调用。

2 个答案:

答案 0 :(得分:3)

通常,父进程发出exec系统调用,创建一个重复进程,该进程具有(大部分)与原始进程相同的属性(例如,不同的进程ID)。从那里,子进程issues one of the exec family system calls用新的进程映像替换它自己的进程映像。 This is explained quite well on the Unix SE.

enter image description here

在您的情况下,shell是父进程,而#34;新程序&#34;你正在运行的是最终调用 var details = _webcontext.products.ToList(); if (details != null) { Parallel.ForEach(details, x => { Products obj = new Products(); obj.slno = x.slno; obj.ProductName = x.ProductName; obj.Price = Convert.ToInt32(x.Price); li.Add(obj); }); return li; } 的子进程。

答案 1 :(得分:0)

您的shell将为您的程序创建新进程,它将执行exec。这意味着您的程序的父进程就是您的shell。

  

echo $$此命令将提供shell进程ID。

计划:

printf("PPID : %d, PID : %d\n", getppid(), getpid() );

当你运行程序时,你将得到低于输出。

PPID:19172,PID:26388

注意:

  Parent process and shell process ID's are same.