Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Linux中创建子进程_Linux_Process_Pid - Fatal编程技术网

在Linux中创建子进程

在Linux中创建子进程,linux,process,pid,Linux,Process,Pid,可以创建其他流程(子流程)的流程,同时以下内容是正确的: a) 该进程的PID值为0 b) 子进程可以继续独立生存 c) 流程创建者将其上下文复制到子流程 d) 以上都是事实 我的观点是a)不可能,因为PID=0是保留的,processor creator也不会将其上下文复制到子进程,所以我考虑b,因为它可以独立生存,但它不会被称为守护进程吗??这个问题有正确的答案吗?阅读了解子进程是如何创建的。这可能很好地回答了您的问题。fork()系统调用将创建现有进程的克隆/副本。现在,两个进程正在运行,

可以创建其他流程(子流程)的流程,同时以下内容是正确的:

a) 该进程的PID值为0

b) 子进程可以继续独立生存

c) 流程创建者将其上下文复制到子流程

d) 以上都是事实

我的观点是a)不可能,因为PID=0是保留的,processor creator也不会将其上下文复制到子进程,所以我考虑b,因为它可以独立生存,但它不会被称为守护进程吗??这个问题有正确的答案吗?

阅读了解子进程是如何创建的。这可能很好地回答了您的问题。

fork()系统调用将创建现有进程的克隆/副本。现在,两个进程正在运行,数据、程序中的位置和进程映像都相同。区别在于fork()系统调用的返回值

由于fork()函数向父(forking)进程和子(forking)进程返回不同的值,因此可以确定是在父进程中运行还是在子进程中运行

父(forking)进程在父进程中接收结果fork()==childpid,因此父进程知道子进程的进程id(因此可以杀死它,等待它终止,等等)

父级还可以接收结果fork()=-1,这表示fork()系统调用失败

在子进程中,子进程(forked)接收fork()==0的结果,如果您想知道子进程的进程id,只需请求当前进程id获取子进程的进程id即可

这是一篇与我发布的代码示例相关的文章

微妙之处在于(a)不是真的,因为父级和子级的每个进程id都不是=0,但子级中fork()的返回总是=0。因此,手册可能会说PID=0。(b)部分是正确的。第(c)部分不正确,因为复制任何内容的不是流程创建者,而是系统调用(在父流程的上下文中)进行复制