程序与资源管理
Linux是如何识别程序的?当系统有太多的“死亡的”程序时,怎样将该程序查出来并删除掉?如果主机仅仅允许一次登入一个终端画面,如何进行多项工作?怎样设置一个程序让它执行更快些?这些都是进程控制的重点,如果X_Window“死了”,但Linux还运行,是否需要重新启动呢?是是否有其它方式可以重新启动X_Window?
什么是进程
在Linux系统中:触发任何一个事件,系统都会将它定义成为一个进程,并且给这个进程一个ID,称为PID,同时根据启动整个进程的用户与相关属性关系,给这个PID一组有效地权限设置。这个PID能在系统上进行的动作就与PID权限有关。
进程与程序
如何产生一个进程ID(PID),“执行一个程序或命令”,就可以触发一个事件而获取PID。系统仅仅认识二进制文件,二进制文件就是程序。
当登录并执行bash时,系统已经给我们一个pid,这个PID是根据登录者的UID/GI而得到的。
1 子程序与父程序
登录后会获取一个bash的Shell,利用这个bash提供的接口去执行另一命令,这些另外执行的命令也会被触发成为PID,则这个PID就是“子进程”,而在bash环境下的就称为“父进程”
2 系统或网络服务:常驻内存程序
有无一直执行的程序呢?当然有,比如系统每分钟都会扫描/etc/crontab以及相关的设置文件来进行工作任务分配。工作任务分配时由“cron程序”负责的,后台启动了它并且在一直持续不断的运行,是一个“常驻内存程序”。有很多,比如crond和atd, syslog还有一些事复制网络联机的服务如Apache,named,vsftp等等。这些网络服务程序执行后,会启动一个可以负责网络监听的端口(port),以提供外部客户端的联机功能。
Linux的多用户、多任务环境
多人环境。
多任务行为。
多重登录环境的7个基本终端窗口。
特殊的程序管理行为。
Bash环境下的作业管理。
多用户、多任务的系统资源分配问题。
作业管理:&, [ctrl]-z, jobs, fg, bg, kill
作业管理是在bash环境下使用的。“当我们登录系统获取bash shell之后,在单一终端界面下,同时管理多个作业”
注意:管理作业时,每个作业都是当前bash的子程序,也就是说它们彼此间是有联系的。我们无法以作业管理的方式由tty1去管理tty2的bash。
要进行bash的作业管理,必须注意的限制:
程序必须是Shell的子程序。
程序不能等待terminal/shell的输入。
1 直接将命令放到后台“执行”的&
前台:你可以控制的作业称为前台作业;
后台:在内存可以自行运行的作业,您无法直接控制它,除非bg/fg等命令将作业调出来。
将作业放到后台工作 : &
在敲完命令后,在敲回车前 加上&这个字符 然后再点回车 就可以把刚才所的命令放到后台去执行了。 会给出刚才的作业一个 作业号 和PID.然后就回到命令提示符号下 可以继续工作咯。这样做最大的好处不用怕被 “ctrl+c”中断掉。将作业放到后台中,要特别注意数据的流向。如果有stdout和stderr时,数据依然是会输出到屏幕上,这个时候就要使用数据流重导向了。
2 将“前台”作业放到后台“暂停”
利用 “[ctrl]+z”组合键,可以把当前的作业放到后台 暂停执行。
[root@www ~]# vi ~/.bashrc
# 在 vi 的一般模式下,按下 [ctrl]-z 这两个按键
[1]+ Stopped vim ~/.bashrc
[root@www ~]# <==顺利取得了前景的操控权!
[root@www ~]# find / -print
....(输出省略)....
# 此时屏幕会非常的忙碌!因为屏幕上会显示所有的文件名。请按下 [ctrl]-z 暂停
[2]+ Stopped find / -print
在 vi 的一般模式下,按下 [ctrl] 及 z 这两个按键,屏幕上会出现 [1] ,表示这是第一个工作, 而那个 + 代表最近一个被丢进背景的工作,且目前在背景下预设会被取用的那个工作 (与 fg 这个指令有关 )!而那个 Stopped 则代表目前这个工作的状态。在预设的情况下,使用 [ctrl]-z 丢到背景当中的工作都是『暂停』的状态!
3 观察当前后台作业状态:jobs
[root@linux ~]# jobs [-lrs]
参数:
-l :除了列出作业号之外,同时列出PID
-r:仅列出正在后台运行(run)的作业
-s:仅列出正在后台暂停(stop)的作业
“+“表示是默认的作业
4 将后台作业拿到前台处理:fg
[root@linux ~]#fg %jobnumber
参数:
Jobnumber:作业的号码,注意“%“是可有可无的。
5 让作业在后台运行:bg
我们刚刚提到,那个 [ctrl]-z 可以将目前的工作丢到背景底下去『暂停』, 那么如何让一个工作在背景底下『 Run 』呢?我们可以在底下这个案例当中来测试! 注意喔!底下的测试要进行的快一点!^_^
[root@linux ~]#bg %jobnumber
范例一:一执行 find / -perm +7000 > /tmp/text.txt 后,立刻丢到背景去暂停!
[root@www ~]# find / -perm +7000 > /tmp/text.txt
# 此时,请立刻按下 [ctrl]-z 暂停!
[3]+ Stopped find / -perm +7000 > /tmp/text.txt
范例二:让该工作在背景下进行,并且观察他!!
[root@www ~]# jobs ; bg %3 ; jobs
[1]- Stopped vim ~/.bashrc
[2] Stopped find / -print
[3]+ Stopped find / -perm +7000 > /tmp/text.txt
[3]+ find / -perm +7000 > /tmp/text.txt & <==用 bg%3 癿情冴!
[1]+ Stopped vim ~/.bashrc
[2] Stopped find / -print
[3]- Running find / -perm +7000 > /tmp/text.txt &
6 管理后台作业:kill
kill 这个指令 直接删除作业或者是将该作业重新启动
[root@www ~]# kill -signal %jobnumber [root@www ~]# kill -l 选项与参数: -l :这个是 L 的小写,列出目前 kill 能够使用的讯号 (signal) 有哪些? signal :代表给予后面接的那个工作什么样的指示啰!用 man 7 signal 可知: -1 :重新读取一次参数的设定档 (类似 reload); -2 :代表与由键盘输入 [ctrl]-c 同样的动作; -9 :立刻强制删除一个工作; -15:以正常的程序方式终止一项工作。与 -9 是不一样的。
范例一:找出目前的 bash 环境下的背景工作,并将该工作『强制删除』。 [root@www ~]# jobs [1]+ Stopped vim ~/.bashrc [2] Stopped find / -print [root@www ~]# kill -9 %2; jobs [1]+ Stopped vim ~/.bashrc [2] Killed find / -print # 再过几秒你再下达 jobs 一次,就会发现 2 号工作不见了!因为被移除了!
范例:找出目前的 bash 环境下的背景工作,并将该工作『正常终止』掉。 [root@www ~]# jobs [1]+ Stopped vim ~/.bashrc [root@www ~]# kill -SIGTERM %1 # -SIGTERM 与 -15 是一样的!您可以使用 kill -l 来查阅! |
特别留意一下, -9 这个 signal 通常是用在『强制删除一个不正常的工作』时所使用的, -15 则是以正常步骤结束一项工作(15也是默认值),两者之间并不相同呦!
脱机管理问题
如果不想要使用 at 的话,那你也可以尝试使用 nohup 这个指令来处理喔!这个 nohup 可以让你在脱机或注销系统后,还能够让工作继续进行。他的语法有点像这样:
[root@www ~]# nohup [指令与参数] <==在终端机前景中工作
[root@www ~]# nohup [指令与参数] & <==在终端机背景中工作
进程管理:
进程管理为什么重要:
首先:我们在操作操作系统时,各项作业其实都是通过某个PID来执行,因为是否执行某项作业,与该进程的权限有关。
其次:如果Linux系统很忙,当整个系统资源块要被用完时,是否能找出最耗费系统资源的进程并删除该进程,让系统恢复正常。
再次:如果某个程序写的不好,导致内存中产生有问题的进程,如何找出它,然后删除?
最后:如果同时在系统中运行5~6项作业,其中有一项作业最重要,如何让它先运行?
进程的观察
查看系统上正在运行的进程:静态的ps或动态的top 结合pstree来查看进程树之间的关系。
1 ps
ps :将某个时间点的程序运作情况撷取下来
[root@www ~]# ps aux <==观察系统所有的程序数据 [root@www ~]# ps -lA <==也是能够观察所有系统的数据 [root@www ~]# ps axjf <==连同部分程序树状态 选项与参数: -A :所有的 process 均显示出来,与 -e 具有同样的效用; -a :不与 terminal 有关的所有 process ; -u :有效使用者 (effective user) 相关的 process ; x :通常与 a 这个参数一起使用,可列出较完整信息。 输出格式规划: l :较长、较详细的将该 PID 的的信息列出; j :工作的格式 (jobs format) -f :做一个更为完整的输出。 |
不过建议使用下面这个两个就可以了:一个是只能查阅自己 bash