引言
小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
我们今天来聊聊进程,任何程序啊,要想执行都是以进程单位执行的,不管是手机还是电脑都一样,比如我的VIVO手机,前几天宕机了,他就抛的是系统进程未响应,那Linux操作系统也是一样啊,系统本身也是应用程序,那就说说Linux系统的进程管理吧。
问题背景
我们之前聊了那个Linux进程,也就只是简简单单的提了一下,然后我们再简简单单的提一下,哈哈哈,就是说Linux系统里面是一个个进程,把你的应用程序都搞成一个个进程,然后执行进程,但是有一个问题,如果这个进程没有执行完,突然执行另外一个进程,你说这好办,再弄一个新的进程,但是这个进程还需要老进程的资源,你怎么办呢?重新分配一个新的?最好的办法还是复用,资源是有限的啊,你不要造轮子。
进程管理
于是,我们的进程就分为了两类:父进程和子进程,进程是属于系统调用,调用用fork实现,这样父进程调用fork创建一个新进程的时候,这个新进程会将父进程的资源都拷贝一遍,但是如果没有特别区分的话,父子进程都是按相同状态下运行的,这就没有意义了。
那怎么区分呢?Linux是这样区分的,如果是父进程,那调用返回的还是进程id,证明你可以接着执行,可如果是子进程呢?这个时候注意,区别就来了,如果是子进程就返回0,那就请求另外一个系统调用exec执行程序,这样就产生一个分支,当然有趣的是fork也是分支的意思。