程序员应如何理解进程创建
本文是《操作系统:以程序员的角度》第四章,从本章开始将开启第一个重要的主题:进程,彻底理解进程对程序员来说是极为重要的,本章就从程序员的角度来讲解到底什么是进程、操作系统是如何实现进程的。本文承接上篇《程序员应如何理解进程》以下为本篇目录:
- 进程是由谁创建的?在什么情况下创建的?
- 操作系统创建进程:初始化
- 进程创建进程:系统调用
- 程序员什么情况下需要创建进程
- 任务处理
- 充分利用多核
- 增强系统稳定性
- 从进程的角度来理解操作系统
- 实例讲解进程创建:fork与exec
- 总结
从这一节起,我们将详细讲解进程的一生。进程如人生,进程的一生同样包含三个阶段,创建,运行和终结,本节是进程三部曲的开篇:进程创建。
接下来,我们讲解关于进程创建的诸多问题。
进程是由谁创建的?在什么情况下创建的?
幸好这个问题不像鸡生蛋蛋生鸡那样,这个问题的答案相对简单,进程的创建者有两种:
- 操作系统可以创建新的进程
- 进程也可以创建新的进程
其中,进程的创建者被称为父进程,创建出的进程被称为子进程。
1,操作系统创建进程:初始化
作为计算机的Boss,最初的进程是由操作系统创建的,操作系统在初始化的过程中会创建一系列进程。这些进程中有的是用户可见的,主要用来和用户进行交互,比如Windows或Linux开机后输入用户密码,这就是一个进程,这类进程被称之为前端进程(Foreground Processes);
有的是用户看不到的在背后默默运行的进程,比如用来检测系统是否有更新的进程,这类进程被称之为后端进程(Background Process)。在Windows或Linux系统中,虽然开机后我们没有打开任何程序,但是使用Windows下的任务管理器或者Linux中的ps命令,你都会发现操作系统已经创建了很多进程。
2,进程创建进程:系统调用
其实从本质上来说,进程最终都是由操作系统创建出来的,但是操作系统把创建进程作为一项服务提供给了用户程序。还记得程序员应该怎样向操作系统请求服务吗,没错,就是通过系统调用。用户程序可以通过系统调用来创建新的进程。在Linux(Unix)下这个系统调用是大名鼎鼎的fork,在Windows下这个系统调用叫做CreateProcess。
比如在Linux系统中,我们通过命令行来运行程序,其实命令行解释器,比如常用的bash,也是一个进程,bash进程等待用户输入,然后调用系统调用创建新的进程来执行命令。比如我们常用的ps命令,注意ps本身就是一个可执行程序,当用户敲击回车按键后,bash调用fork创建新的进程,这个新的进程运行的就是ps程序,bash本身不关心ps进程是如何工作的,bash要做的就是等待,等待ps运行完成并输出结果后返回到bash,然后等待用户的下一次输入,如图所示:
从操作系统使用者的角度来说,一切皆为进程。操作系统中你能看到的、能用的都是进程。
因此,学习操作系统要以进程为核心,须知,操作系统中的一切都是为进程来服务的。
程序员什么情况下需要创建进程
本文剩余部分请参见这里《深入理解操作系统》。
还没有评论,来说两句吧...