如果我的问题看起来很愚蠢,我很抱歉。我有一个关于操作系统中新进程创建的查询。请考虑以下简单的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调用。
答案 0 :(得分:3)
通常,父进程发出exec
系统调用,创建一个重复进程,该进程具有(大部分)与原始进程相同的属性(例如,不同的进程ID)。从那里,子进程issues one of the exec
family system calls用新的进程映像替换它自己的进程映像。 This is explained quite well on the Unix SE.
在您的情况下,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.