关于 fork 和 exec 是如何在 Unix 上工作的.doc
《关于 fork 和 exec 是如何在 Unix 上工作的.doc》由会员分享,可在线阅读,更多相关《关于 fork 和 exec 是如何在 Unix 上工作的.doc(4页珍藏版)》请在三一文库上搜索。
1、关于 fork 和 exec 是如何在 Unix 上工作的本文是关于 fork 和 exec 是如何在 Unix 上工作的。你或许已经知道,也有人还不知道。几年前当我了解到这些时,我惊叹不已。我们要做的是启动一个进程。我们已经在博客上讨论了很多关于系统调用的问题,每当你启动一个进程或者打开一个文件,这都是一个系统调用。所以你可能会认为有这样的系统调用:start_process(ls,-l,my_cool_directory)这是一个合理的想法,显然这是它在 DOS 或 Windows 中的工作原理。我想说的是,这并不是 Linux 上的工作原理。但是,我查阅了文档,确实有一个 posix_s
2、pawn 的系统调用基本上是这样做的,不过这不在本文的讨论范围内。fork 和 execLinux 上的 posix_spawn 是通过两个系统调用实现的,分别是 fork 和 exec(实际上是 execve),这些都是人们常常使用的。尽管在 OS X 上,人们使用 posix_spawn,而 fork 和 exec 是不提倡的,但我们将讨论的是 Linux。Linux 中的每个进程都存在于“进程树”中。你可以通过运行 pstree 命令查看进程树。树的根是 init,进程号是 1。每个进程(init 除外)都有一个父进程,一个进程都可以有很多子进程。所以,假设我要启动一个名为 ls 的进程
3、来列出一个目录。我是不是只要发起一个进程 ls 就好了呢?不是的。我要做的是,创建一个子进程,这个子进程是我(me)本身的一个克隆,然后这个子进程的“脑子”被吃掉了,变成 ls。开始是这样的:my parent|- me然后运行 fork(),生成一个子进程,是我(me)自己的一份克隆:my parent|- me|- cloneof me然后我让该子进程运行 exec(ls),变成这样:my parent|- me|- ls当 ls 命令结束后,我几乎又变回了我自己:my parent|- me|- ls(zombie)在这时 ls 其实是一个僵尸进程。这意味着它已经死了,但它还在等我,以防
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关于 fork exec 是如何在 Unix 上工作的 何在 工作
链接地址:https://www.31doc.com/p-3387477.html