Linux学习笔记(十八)

程序与资源管理

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] 及 这两个按键,屏幕上会出现 [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 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值