全面了解Linux进程技术

运维 系统运维
在启用电脑时,你会发现必不可少的就是操作系统。操作系统中微软占很大部分,不过这几年Linux也赶上了微软。这里介绍Linux的知识,让你学好应用Linux系统。今天一讲Linux进程技术,希望你记住Linux进程技术。

在启用电脑时,你会发现必不可少的就是操作系统。操作系统中微软占很大部分,不过这几年Linux也赶上了微软。Linux是一个多用户多任务的操作系统。这里介绍Linux的知识,让你学好应用Linux系统。今天一讲Linux进程技术,希望你记住Linux进程技术。
  
一、 进程的属性

进程的定义:一个进程是一个程序的一次执行的过程,程序是静态的,它是一些保存在磁盘上的可执行的代码和数据集合,进程是一个动态的概念。它是Linux 系统的基本的调度单位,一个进程由如下元素组成:

1、 程序的读取上下文,它表示程序读取执行的状态。
2、 程序当前执行目录。
3、 程序服务的文件和目录
4、 程序的访问权限。
5、 内存和其他分配给进程的系统资源。

Linux进程中最知名的属性就是它的进程号(Process Idenity Number,PID)和它的父进程号(parent process ID,PPID)。PID、PPID都是非零正整数。一个PID惟一地标识一个进程。一个进程创建新进程称为创建了子进程(child process)。相反地,创建子进程的进程称为父进程。所有进程追溯其祖先最终都会落到进程号为1的进程身上,这个进程叫做init进程。是内核自举后***个启动的进程。init进程作用是扮演终结父进程的角色。因为init进程永远不会被终止,所以系统总是可以确信它的存在,并在必要的时候以它为参照。如果某个进程在它衍生出来的全部子进程结束之前被终止,就会出现必须以init为参照的情况。此时那些失去了父进程的子进程就都会以init作为它们的父进程。如果你执行一下ps -af 命令,可以列出许多父进程ID(Parent Process ID,PPID)为1的进程来。Linux提供了一条pstree命令,允许用户查看系统内正在运行的各个进程之间的继承关系。直接在命令行中输入pstree即可,程序会以树状结构方式列出系统中正在运行的各进程之间的继承关系。

二、进程在运行中的三种状态:

执行(Running)状态:CPU正在执行,即进程正在占用CPU。
就绪(Waiting)状态:进程已经具备的执行的一切条件,正在等待分配CPU的处理时间片。
停止(Stoped)状态:进程不能使用CPU。
内核使用进程来控制对CPU和其他系统资源的访问,并且使用进程来决定在CPU上运行那个程序、运行多久以及采用什么特性运行它。内核的调度器负责在所有的进程间分配CPU执行时间,称为时间片(time slice),它轮流在每个进程分得的时间片用完后从进程那里得到控制权。如果处理器比较快的话,你会觉得时间片非常小,仿佛是几个进程在同时运行。在Linix操作系统启动过程中,系统自动创建init等系统进程,用于管理内存资源以及对用户进程进行调度等。进程是动态的, 一个程序的可以有多个进程同时或不同时执行它。一次执行多进程的好处在于你可以一边发邮件,一边听音乐。

三、 理解Linux下进程的结构

Linux中一个进程在内存里有三部份的数据,就是"数据段","堆栈段"和"代码段",基于I386兼容的中央处理器,都有上述三种段寄存器,以方便操作系统的运行。
 
代码段,是存放了程序代码的数据,假如机器中有数个进程运行相同的一个程序,那么它们就可以使用同一个代码段。而数据段则存放程序的全局变量,常数以及动态数据分配的数据空间。堆栈段存放的就是子程序的返回地址、子程序的参数以及程序的局部变量。堆栈段包括进程控制块PCB(Process Control Block)中。PCB处于进程核心堆栈的底部,不需要额外分配空间。
  
四、 Linux进程的种类

Linux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性。 
a) 交互进程--由一个shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。
b) 批处理进程--这种进程和终端没有联系,是一个进程序列。
c) 监控进程(也称守护进程)--Linux系统启动时启动的进程,并在后台运行。

五、 Linux进程的创建

在Linux下产生新的进程的系统调用就是fork函数,这个函数名是英文中"分叉"的意思。为什么取这个名字呢?因为一个进程在运行中,如果使用了fork,就产生了另一个进程,于是进程就"分叉"了,所以这个名字取得很形象。fock的语法:
#include #include pid_t fork();
说明:本系统调用产生一个新的进程, 叫子进程, 调用进程叫父进程。
在Linux网络编程中经常用到fork()系统调用。例如一个客户机/Web服务器构建的网络环境中,Web服务器往往可以满足许多客户端的请求。如果一个客户机如果需要访问Web服务器需要发送一个请求,此时由服务器生成一个父进程,然后父进程通过fork()系统调用产生一个子进程,此时客户机的请求由子进程完成。父进程可以再度回到等待状态不断服务其他用户端。
 

有一个更简单的执行其它程序的函数system,参数string传递给一个命令解释器(一般为sh)执行, 即string被解释为一条命令, 由sh执行该命令.若参数string为一个空指针则为检查命令解释器是否存在.该命令可以和同命令行下的命令形式相同, 但由于命令做为一个参数放在系统调用中, 应注意编译时对特殊意义字符的处理. 命令的查找是按PATH环境变量的定义的. 命令所生成的后果一般不会对父进多进程编程造成影响. 返回值:当参数为空指针时, 只有当命令解释器有效时返回值为非零.若参数不为空指针, 返回值为该命令的返回状态(同waitpid())的返回值. 命令无效或语法错误则返回非零值,所执行的命令被终止. 其他情况则返回-1.它是一个较高层的函数,实际上相当于在Shell下执行一条命令,除了system之外,系统调用exec是用来执行一个可执行文件来代替当前进程的执行映像。系统调用exit的功能是终止发出调用的进程。sleep 函数调用用来指定进程挂起的秒数。wait函数族用来等待和控制进程。poppen函数和system函数类似,区别是用管道方式处理的输出。

六、进程的管理

Linux管理进程***方法就是使用命令行下的系统命令。

1、启动进程
键入需要运行的程序的程序名,执行一个程序,其实也就是启动了一个进程。在Linux系统中每个进程都具有一个进程号(PID),用于系统识别和调度进程。启动一个进程有两个主要途径∶手工启动和调度启动,后者是事先进行设置,根据用户要求自行启动。由用户输入命令,直接启动一个进程便是手工启动进程。但手工启动进程又可以分为很多种,根据启动的进程类型不同、性质不同,实际结果也不一样。
(1) 前台启动
是手工启动一个进程的最常用的方式。一般地,用户键入一个命令"df",这就已经启动了一个进程,而且是一个前台的进程。这时候系统其实已经处于一个多进程状态。有许多运行在后台的、系统启动时就已经自动启动的进程正在悄悄运行着。有的用户在键入"df"命令以后赶紧使用"ps -x"查看,却没有看到df进程,也觉得很奇怪。其实这是因为df这个进程结束太快,使用ps查看时该进程已经执行结束了。如果启动一个比较耗时的进程,例如在根命令下运行: find , 然后使用ps aux查看,就会看到一个find进程在里面。
(2) 后台启动
直接从后台手工启动一个进程用得比较少一些,除非是该进程甚为耗时,且用户也不急着需要结果的时候。假设用户要启动一个需要长时间运行的格式化文本文件的进程。为了不使整个shell在格式化过程中都处于"瘫痪"状态,从后台启动这个进程是明智的选择。

2、进程调度
当需要中断一个前台进程的时候,通常是使用Ctrl+c组合键;但是对于一个后台进程就不是一个组合键所能解决的了,这时就必须使用kill命令.该命令可以终止后台进程.至于终止后台进程的原因很多,或许是该进程占用的CPU时间过多;或许是该进程已经挂死.这种情况是经常发生的。Kill命令的工作原理是:向Linux系统的内核发送一个系统操作信号和某个程序的进程标识号,然后系统内核就可以对进程标识号指定的进程进行操作。
除了kill外Linux下面的进程涉及到的命令还有:at :at命令在指定时刻执行指定的命令序列;cron:cron命令用来完成重复的工作;crontab命令:crontab命令用于安装、删除或者列出用于驱动cron后台进程的任务表。ps:ps命令主要查看系统中的进程;top命令:top命令和ps命令的基本作用是相同的,显示系统当前的进程和其他状况;但是top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。nice:nice命令是进程按用户指定的优先级运行。renice: renice命令用来改变正在运行进程的优先级

以上就是Linux进程技术的介绍。

【编辑推荐】

  1. Linux上的虚拟化技术 Xen虚拟化初学指南
  2. 处理Linux内核安全详解
  3. Linux的Shell编程 Shell基本语法
  4. Linux的Shell编程 运行Shell程序的方法
  5. Linux的Shell编程bash的内部命令
责任编辑:小霞 来源: 博客园
相关推荐

2009-12-23 17:14:28

2009-12-23 11:05:28

Linux内核

2009-12-03 19:02:05

Linux

2010-01-05 14:46:03

Linux软件安装

2009-12-17 11:37:39

Linux网卡

2014-11-26 23:45:04

2016-06-08 11:36:52

2009-12-16 14:40:40

Linux调整虚拟机硬

2009-12-24 17:36:47

嵌入式Linux

2009-12-15 13:42:22

GNU计划

2010-09-03 10:04:51

PPP Multili

2009-12-24 14:02:57

Linux集群技术

2018-05-30 13:42:39

2010-06-09 12:07:59

路由选择协议

2014-02-19 10:47:00

Android开发规范

2010-07-01 16:52:19

CAN总线协议

2009-03-10 19:19:16

Linux日志文件系统安装使用

2021-06-01 17:40:54

111

2015-09-11 11:02:23

ios静态库开发

2019-01-30 14:42:00

Apache服务器web服务器
点赞
收藏

51CTO技术栈公众号