Unix进程是由操作系统创建的还是main进程创建的 ?

在main函数中执行: pid_t = fork(); 既然是在main函数内部执行fork,那么应该说是由main进程创建了子进程还是操作系统创建了子进程 ? 这个fork创建的所谓子进程,其父进程是main进程还是操作系统的某个进程 ?
调用main函数的进程是什么进程 ? 调用main函数的进程也就是fork进程的父进程吧 ?

fork是一个系统调用,调用fork的过程实际上是向系统发出请求的过程,所谓父子进程的关系,只是进程表中的定义而已,一个进程调用fork生成的进程,其父进程就是调用者进程,所有进程的祖先进程都是1号进程

fork出的子进程当然是可以调用main函数的,使用exec函数族就可以实现这一功能追问

你好! 我只是想知道: 因为进程是一个动态概念,在main函数被调用的时候,肯定已经有了进程存在,那么这个进程是什么 ? 所谓的main进程的说法是否准确? 从Unix操作系统来说,应该是某个内核进程吧 ?

追答

以Linux来说,你执行的main一定属于一个程序,main是这个程序的入口点,这是背景

假设程序就是a.out

你在shell里面输入./a.out开始执行这个程序
实际上的过程是,shell先fork一个子进程,然后使用exec函数将a.out的代码覆盖到子进程的进程空间里,然后子进程从a.out的main开始执行

而Linux的一切系统进程都是由1号Init进程fork来的,所以说Init是所有进程的祖先进程

当然这么说也不够确切,不过对于你的问题来说足够了

追问

谢谢! 太底层的东西先不追究了!

“shell先fork出来的子进程从a.out的main函数处开始执行, 这个“shell先fork出来的子进程”也是main函数内部fork进程的父进程了 ?

追答

你可以暂时先这么理解,shell的实现比较复杂

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-09-28
这个太绕了, 差点被你绕进去, 还好我够机智,从后往前看.

main函数得调用是用户行为, 不是操作系统, OP无法确定用户何时会调用main.
main会向操作系统请求执行得资源, 比如进程空间, cPU得处理时间等等资源, fork当然是在main进程空间中产生得, 它也就是main得子进程
第2个回答  2014-09-27
fork 是系统的API,显然是利用了系统的能力才能实现。父进程是谁同样是系统说了算——系统说它的父进程就是调用 fork 函数的进程追问

是main函数调用fork函数的

追答

每个进程都可以调用main函数……

追问

fork出来的子进程也能调用main函数 ?

第3个回答  2014-10-09
个人 认为是 UNIX

系统 是关键 你说 是吧
相似回答