程序与进程 编辑 请登陆,再编辑

源代码与程序

源代码是指按照一定编写语言标志编写的代码,源代码经过编译或者解释后运行的则为程序。

编程语言分类为:

  • 编译型语言:需要通过编译器将源代码编译为计算机能理解机器语言后,计算机才能执行高级编程语言(编译一次永久运行)。代表语言为C/C++,效率较高。
  • 解释型语言:不需要通过编译器编译,但是需要通过语言的解释器解释后,计算机才能执行高级编程语言(每运行一次就需要解释一次)。代表语言为Python,效率较低。
  • 脚本型语言:是为了缩短传统的编写-编译-链接-运行过程而创建的计算机编程语言。代表语言为JavaScript。效率较低。

程序与进程

进程和程序的区别:程序是指一段完成功能的代码,或者说是一个工具,它是一个静态的概念,而进程它是动态的,比如,linux的vi编辑器,它就是一段在linux下用于文本编辑的工具,那么它是一个程序,而我们在linux终端中,可以分别开启两个vi编辑器的进程。

进程简单的说就是一个程序一次执行的过程,它是一个动态的概念。按照教科书上的定义,进程是程序执行的实例,是linux的基本调度单位。

一旦提到进程,我们的脑子里就应该产生——程序从代码的第一句动态的执行到最后一句这样的一个思路。

一个进程由如下元素组成:

  • 进程的当前上下文,即进程的当前执行状态;
  • 进程的当前执行目录
  • 进程访问的文件和目录
  • 进程的访问权限,比如它的文件模式和所有权
  • 内存和其他分配给进程的系统资源

在linux系统中,内核使用进程来控制对CPU和其他系统资源的访问,并且使用进程来决定在CPU上运行哪个程序,运行多久以及采用什么特性运行它。

内核的调度器负责在所有的进程间分配CPU执行时间,称为时间片(time slice),它轮流在每个进程分得的时间片用完后从进程那里抢回控制权。

OS会为每个进程分配一个唯一的整型ID,做为进程的标识号(pid)。进程除了自身的ID外,还有父进程ID(ppid),所有进程的祖先进程是同一个进程,它叫做init进程,ID为1,init进程是内核自检后的一个启动的进程。

init进程负责引导系统、启动守护(后台)进程并且运行必要的程序。

简单来说,Linux的进程就相当于Windows系统中的任务,每个在linux下运行的程序都是一个进程,每个进程包含(属于自己唯一的)进程标识符及数据,这些数据包含进程变量,外部变量及进程堆栈等。

进程分类

Linux 操作系统包括四种不同类型的进程它们是:交互进程、批处理进程、守护进程和僵尸进程(特殊进程)。每种进程都有自己的特点和属性。

  • 交互进程:是由一个Shell启动的进程。既可以在前台运行,也可以在后台运行。
  • 批处理进程:和终端没有联系,是一个进程序列。
  • 系统守护:进程是Linux系统启动时启动的进程,并在后台运行。
  • 僵尸进程(特殊进程):是指已终止运行,但尚未被清除的进程。

说明:守护进程总是活跃的,一般是后台运行,守护进程一般是由系统在开机时通过脚本自动激活启动或超级管理用户root来启动。 比如在 Fedora中,我们可以定义httpd 服务器的启动脚本的运行级别,此文件位于/etc/init.d目录下,文件名是httpd,/etc/init.d/httpd 就是httpd服务器的守护程序,当把它的运行级别设置为3和5时,当系统启动时,它会跟着启动。由于守护进程是一直运行着的,所以它所处的状态是等待请求处理任务。

进程的属性

进程ID(PID):是唯一的数值,用来区分进程。

父进程和父进程的ID(PPID)

启动进程的用户ID(UID)和所归属的组(GID)

进程状态:状态分为运行R、休眠S、僵尸Z

进程执行的优先级

进程所连接的终端名

进程资源占用:比如占用资源大小(内存、CPU占用量)

父进程和子进程

他们的关系是管理和被管理的关系,当父进程终止时,子进程也随之而终止。但子进程终止,父进程并不一定终止。

相关链接

[鸟哥私房菜:什么是程序](http://vbird.dic.ksu.edu.tw/linux_basic/0440processcontrol.php#whatis

[Linux进程控制](http://wiki.linuxdeepin.com/index.php/%E8%BF%9B%E7%A8%8B%E6%8E%A7%E5%88%B6

[haose的博客:Linux进程](http://xuzhigang921.blog.163.com/blog/static/56199220201123122639986/