在大多数系统中进程都可以并发的执行,并且他们可以动态地创建和结束。因此,这些系统必须提供进程创建和结束的机制。
进程创建
在执行的过程中,一个进程可能会创建几个新的进程。创建进程的进程叫做父进程,新的进程称为该进程的子进程。这些进程中的每一个也可以创建其他的进程,这就形成了一个进程树。
大多数的操作系统(包括UNIX,Linux和Windows)根据独一无二的进程标识符process identifile(pid)来识别进程。pid为在系统中的每个进程提供了一个独一无二的数值,它可以被用过访问内核中单个进程各种属性的索引。
下图展示了Linux操作系统中一个典型的进程树。展示了每个进程的名字和其pid。进程systmed作为所有用户进程根进程和父进程,并且是系统引导时的第一个被创建的用户进程。当系统被引导完后,systemd进程会创建提供额外服务的诸如,网页、打印、ssh等等的进程。下图中没我们看到systemd有两个子进程,logind和sshd。logind是负责管理直接登入到系统的客户端的进程。在这个示例中,客户端通过使用bash shell登入并且分配pid8416。通过使用bash命令行接口,这个用户已经创建了ps和vim编辑器这两个进程。sshd是负责管理客户端通过ssh(secure shell)连接到系统的进程。
![2f2b98cd33c7b4c1b9fd931763a8f309.png](https://i-blog.csdnimg.cn/blog_migrate/a908ffe0dbc87166d2a75fbbae664e63.jpeg)
init 和 systemd进程
传统的UNIX系统把init进程作为所有子进程的根进程。init,也被称为System V init, 被分配给一个值为1的pid,并且是当系统引导完后第一个被创建的进程。
Linux系统一开始也是采用了System V init这种方法,但最近的分发版已经用systemd取代了init。systemd作为系统的初始化进程,很像System V init,但更灵活,并且别init提供了更多的服务。
在UNIX和Linux系统上,我们可以用ps命令获取进程的列表,如下:</