进程

更多资料下载,冲击月薪过万,一线经验工程师录制, 干货满满的嵌入式视频教程,请点击淘宝店:wanglitao.taobao.com

在Linux下运行的每个工具、软件、服务、包括用户自己编写的程序,都是以进程的形式运行的。进程是操作系统进行资源分配和调度的基本单元,所有的进程都会参与操作系统的调度,轮流占用CPU执行。在命令行下使用top命令,可以看到各个进程动态执行的情况,使用ps命令可以查看当前用户、系统的所有进程

# top
# ps -a
    PID TTY         TIME  CMD
   1622 tty2     00:07:53 Xorg
   1658 tty2     00:00:00 gnome-session-b
   2217 pts/0    00:00:00 su
   2218 pts/0    00:00:02 bash
   2481 pts/2    00:00:00 su
   2482 pts/2    00:00:00 bash
  21596 pts/1    00:00:00 su
  21597 pts/1    00:00:00 bash
  56281 pts/0    00:00:09 cscope

每一个进程都会有一个PID号,Linux内核初始化后,会创建一个PID为1的init用户进程,init进程是所有进程的祖先,所有进程都是通过init进程fork出来的。不同Linux发行版、甚至同一Linux发行版的不同版本,init进程执行的可执行文件也不一样,早期是system v init,后续是upstart、systemd,名字虽不一样,但他们担负的使命是一样的:启动getty进程处理用户登录、设置运行级别(决定后续进入图形化模式还是文本模式)、以及处理孤儿进程。

当我们打开一个虚拟终端并启动一个shell解释器时,bash本身就以一个进程的形式运行:

# ps
PID    TTY     TIME   CMD
10285 pts/4  00:00:00 bash
10300 pts/4  00:00:00 ps

当我们在shell下敲入ps命令查看当前终端的进程时,ps是以bash的子进程运行的,bash作为父进程,会等待ps子进程运行结束,根据运行结束状态作相关处理。如果在ps子进程运行结束之前,bash父进程自身就结束了运行,ps子进程就没有了父进程,就变成了孤儿进程,失去了监管。此时系统会将该孤儿进程交给1号进程init监管,处理进程运行结束后的相关处理。

当然,你也可以使用kill命令杀死一个指定的进程(由PID号指定):

# kill pid
《Linux三剑客》视频教程,从零开始快速掌握Linux开发常用的工具:Git、Makefile、vim、autotools、debug,免费赠送C语言视频教程,C语言项目实战:学生成绩管理系统。详情请点击淘宝链接:Linux三剑客