进程

系统 2062 0

From: http://www.startos.com/zhuanti/linux20101115a/index.html

  1、 进程分类

  Linux 操作系统包括三种不同类型的进程它们是:交互进程、批处理进程和守护进程。每种进程都有自己的特点和属性。交互进程是由一个Shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。批处理进程和终端没有联系,是一个进程序列。系统守护进程是Linux系统启动时启动的进程,并在后台运行。

  说明:

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

  2 进程的属性

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

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

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

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

  进程执行的优先级;

  进程所连接的终端名;

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

  3、 父进程和子进程

  他们的关系是管理和被管理的关系,当父进程终止时,子进程也随之而终止。但子进程终止,父进程并不一定终止。比如httpd服务器运行时,我们可以杀掉其子进程,父进程并不会因为子进程的终止而终止。在进程管理中,当我们发现占用资源过多,或无法控制的进程时,应该杀死它,以保护系统的稳定安全运行。

  4、进程管理

  Linux管理进程的最好方法就是使用命令行下的系统命令。Linux下面的进程涉及的命令有比如ps、kill、pgrep等工具。

监视进程命令

1、ps(process status命令)

  使用方式:ps [options] [--help]

  功能说明:显示瞬间行程 (process) 的动态

  主要参数:

  ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义

  -A 列出所有的行程

  -w 显示加宽可以显示较多的资讯

  -au 显示较详细的资讯

  -aux 显示所有包含其他使用者的行程

  范例: ps 如下图:表示的顺序为:进程标号、设备、状态、启动时间、命令。

进程

  2、pstree命令

  使用方式:pstree [-a] [-c] [-h|-Hpid] [-l] [-n] [-p] [-u] [-G|-U] [pid|user]

  pstree -V

  功能说明:将所有行程以树状图显示, 树状图将会以 pid (如果有指定) 或是以 init 这个基本行程为根 (root) ,如果有指定使用者 id , 则树状图会只显示该使用者所拥有的行程

  主要参数:

  -a 显示该行程的完整指令及参数, 如果是被记忆体置换出去的行程则会加上括号。

  -c 如果有重覆的行程名, 则分开列出 (预设值是会在前面加上 *)。

  范例: pstree 如下图:

进程

  说明:命令对程序名称相同的会自动合并,所有"|-auto---4*[{automount}]"即表示系统中有4个automount进程产生的子进程。

  3、top命令

  使用方式:top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]

  功能说明:实时显示 process 的动态

  主要参数:

  d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s

  q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行

  c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称S : 累积模式,会将己完成或消失的子行程 ( dead child process ) 的 CPU time 累积起来

  s : 安全模式,将交谈式指令取消, 避免潜在的危机

  i : 不显示任何闲置 (idle) 或无用 (zombie) 的行程

  n : 更新的次数,完成后将会退出 top

  b : 批次档模式,搭配 "n" 参数一起使用,可以用来将 top 的结果输出到档案内

  范例:显示更新十次后退出 ; top -n 10 如下图:

  使用者将不能利用交谈式指令来对行程下命令 :

  top -s 如下图:

进程

  PID(Process ID):进程标志号,是非零正整数。

  USER:进程所有者的用户名。

  PR:进程的优先级别。

  NI:进程的优先级别数值。

  VIRT:进程占用的虚拟内存值。

  RES:进程占用的物理内存值。

  SHR:进程使用的共享内存值。

  STAT:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。

  %CPU:该进程占用的CPU使用率。

  %MEM:该进程占用的物理内存和总内存的百分比。

  TIME:该进程启动后占用的总的CPU时间。

  COMMAND:进程启动的启动命令名称,如果这一行显示不下,进程会有一个完整的命令行。

使用kill 命令控制进程

使用方式: kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>]

功能说明: 删除执行中的程序或工作。kill可将指定的信息送至程序,预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或 jobs指令查看。

主要参数:

  -l <信息编号>  若不加<信息编号>选项,则-l参数会列出全部的信息名称。

  -s <信息名称或编号>  指定要送出的信息。

说明:

  进程是Linux系统中一个非常重要的概念。Linux是一个多任务的操作系统,系统上经常同时运行着多个进程。我们不关心这些进程究竟是如何分配的,或者是内核如何管理分配时间片的,所关心的是如何去控制这些进程,让它们能够很好地为用户服务。

kill命令的工作原理:

  向Linux系统的内核发送一个系统操作信号和某个程序的进程标识号,然后系统内核就可以对进程标识号指定的进程进行操作。

  例如在top命令中,我们看到系统运行许多进程,有时就需要使用kill中止某些进程来提高系统资源。在讲解安装和登陆命令时,曾提到系统多个虚拟控制台的作用是当一个程序出错造成系统死锁时,可以切换到其它虚拟控制台工作关闭这个程序。此时使用的命令就是 kill,因为kill是大多数Shell内部命令可以直接调用的。

  实例:使用kill命令

  第一步:执行find命令(#find asdfg /)。

  说明:很费时间的命令。

  第二步:查看find对应的进程号。(ps aux|grep find) 如图:

  显示地项目共分为四项,依次为PID(进程ID)、TTY(终端名称)、TIME(进程执行时间)、COMMAND(该进程地命令行输入)。

进程

  第三步:使用kill杀死find进程(#kill 8269)。

进程优先级设定(nice命令)

  使用方式:nice [-n adjustment] [-adjustment] [--adjustment=adjustment] [--help] [--version] [command [arg...]

  功能说明:以更改过的优先序来执行程序, 如果未指定程序, 则会显示出目前的排程优先序, 内定的 adjustment 为 10, 范围为 -20 (最高优先序) 到 19 (最低优先序)

  主要参数:

  -n adjustment, -adjustment, --adjustment=adjustment 皆为将该原有优先序的增加 adjustment

  --help 显示求助讯息

  --version 显示版本资讯

  范例: 将 ls 的优先序加 1 并执行 : nice -n 1 ls

  注意 : 优先序 (priority) 为操作系统用来决定 CPU 分配的参数,Linux 使用『回合制(round-robin)』的演算法来做 CPU 排程,优先序越高,所可能获得的 CPU时间就越多。

定期或规定时间内执行Linux程序

  1、定期时间内执行Linux程序(crontab)

  使用方式:  crontab [ -u user ] file

  crontab [ -u user ] { -l | -r | -e }

  功能说明:crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。

  主要参数:

  -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)

  -r : 删除目前的时程表

  -l : 列出目前的时程表

  时程表的格式如下 :

  f1 f2 f3 f4 f5 program

  其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。

  当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推

  当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推

  当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推

  当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其馀类推。

  说明:使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。

  例子1:每月每天每小时的第 0 分钟执行一次 /bin/ls :

  0 * * * * /bin/ls

  例子2:在 12 月内, 每天的早上 6 点到 12 点中,每隔 20 分钟执行一次 /usr/bin/backup :

  0 6-12/3 * 12 * /usr/bin/backup

  注意 :当程序在你所指定的时间执行后,系统会寄一封信给你,显示该程序执行的内容,若是你不希望收到这样的信,请在每一行空一格之后加上 > /dev/null 2>&1 即可 。

  2、规定时间内执行Linux程序(at命令)

  使用方式:at -V [-q queue] [-f file] [-mldbv] TIME

  功能说明:at 可以让使用者指定在 TIME 这个特定时刻执行某个程序或指令,TIME 的格式是 HH:MM其中的 HH 为小时,MM 为分钟,甚至你也可以指定 am, pm, midnight, noon, teatime(就是下午 4 点锺)等口语词。

  如果想要指定超过一天内的时间,则可以用 MMDDYY 或者 MM/DD/YY 的格式,其中 MM 是分钟,DD 是第几日,YY 是指年份。另外,使用者甚至也可以使用像是 now + 时间间隔来弹性指定时间,其中的时间间隔可以是 minutes, hours, days, weeks。

  使用者也可指定 today 或 tomorrow 来表示今天或明天。当指定了时间并按下 enter 之后,at 会进入交谈模式并要求输入指令或程序,当你输入完后按下 ctrl+D 即可完成所有动作,至于执行的结果将会寄回你的帐号中。

  主要参数:

  -V : 印出版本编号

  -q : 使用指定的伫列(Queue)来储存,at 的资料是存放在所谓的 queue 中,使用者可以同时使用多个 queue,而 queue 的编号为 a, b, c... z 以及 A, B, ... Z 共 52 个

  -m : 即使程序/指令执行完成后没有输出结果, 也要寄封信给使用者

  -f file : 读入预先写好的命令档。使用者不一定要使用交谈模式来输入,可以先将所有的指定先写入档案后再一次读入

  -l : 列出所有的指定 (使用者也可以直接使用 atq 而不用 at -l)

  -d : 删除指定 (使用者也可以直接使用 atrm 而不用 at -d)

  -v : 列出所有已经完成但尚未删除的指定

  例子1: 三天后的下午 5 点钟执行 /bin/ls :

  at 5pm +3 days /bin/ls

  例子2: 三个星期后的下午 5 点钟执行 /bin/ls :

  at 5pm +2 weeks /bin/ls

  例子3: 明天的 17:20 执行 /bin/date :

  at 17:20 tomorrow /bin/date

  例子4: 1999 年的最后一天的最后一分钟印出 the end of world !

  at 23:59 12/31/1999 echo the end of world !

其它系统管理命令

顺序
命令
语法
功能
主要选项
1

man

man [-k] [command_name] 显示参考手册,提供联机帮助信息。 -k表示指定关键字查询的有关命令。
2 uname umane [选项] 显示目前的版本信息。 [-a|m|n|r|s|v|help|version]
3 date date  [选项] 可以用来显示或设定系统的日期与时间。 [-d|help|s|u|-version]
4 cal cal  [选项]  [月] [年] 显示某年某月的日历。 -j显示第几天;-y显示整年日历
5 pwd pwd 显示目前所在目录。  
6 free free  [选项] 显示内存状态。 [-b|k|m|o|s|t|V]
7 last last  [选项][账号][终端] 列出目前与过去系统登录用户信息。 [-a|d|f|n|R|x]
8 shutdown shutdown[选项][时间][警告信息] 系统关机命令。 [-c|f|F|h|k|n|r|t]
9 halt halt [选项] 选择性关闭系统命令 [-d|f|i|n|p|w]
10 reboot rebioot [选项] 重新开机命令。 [-d|f|i|n|w]
11 init init state 改变系统状态。 [0-6|s/S]
12 runlevel runlevel 查看当前系统所处运行状态  
13 login login 注册进入系统。  
14 logout logout 用户注销。  

进程


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论