您的位置:首页 > 运维架构 > Linux

linux中的进程以及任务调度

2015-02-24 13:16 260 查看
今天来学习一下有关linux的进程与任务调度的知识。

什么是进程呢,我的理解,进程就是指系统中正在运行的程序。打开任务管理器我们能看到有许多进程,能看到其占用内存,用户名等等。linux中当然也有这个概念。

那么说道进程,就再提一个概念叫线程。线程指的是一个程序运行中的最小单元,也有人叫他 轻量级进程。 学习JAVA的多线程 或者编写C/C++多线程程序的同学对这个概念应该会比较清楚。

这里举一个程序来说一下:如果一个程序在操作的过程中出现了一个十分耗时的操作,那么用户就需要停留在这个操作中不能做其他事情,这样的程序就是单线程程序,比做过web开发的同学知道我们用form表单提交action的时候,这就是一个单线程的操作,点击submit后页面中的其他东西在提交过程中你是不能操作的(假设验证速度比较慢),那么这样一来用户体验肯定就不好;但是还有一个技术叫ajax,它能够向后台发送异步请求,这个时候我们就可以在页面请求的时候去做别的事情,看起来不像是死机了那样。其实就是在整个web程序中会有很多线程在操作,这些线程构成了一个进程(这么说可能不太准确,但是可以先这么理解吧),当程序中所有线程都结束了,这个程序就结束了。

说到这大家也明白了吧,进程中有很多线程,系统中有很多进程,大致是这么一个层次;相对来说线程不能独立存在,他是由进程来创建的;相对来说线程消耗的CPU和内存小于进程;线程没有独立的地址空间,而进程有。所谓独立空间就是说系统分配的内存,每个进程在运行中都是会占用一部分内存的,占用内存大就会使系统很卡,导致死机(这里再说一个东西,就是系统分配给不同进程的内存是不能有重叠的,如果你发现两个进程占用的内存有相同的地方,有可能就是病毒在试图修改你的进程;还有如果你的系统分配给你的某个进程一个空内存,或者内存越界,就会导致系统蓝屏,貌似很多蓝屏原理大概就是内存啊,显存啊出现了这种情况)。进程也分前台后台(有点类似web开发的前台后台哈),前台进程好比我们打开myeclipse,出现图形操作界面,后台进程好比打开mysql服务,这块是大家看不见的。(这里说一下,linux下安装myeclipse我已经说过了,大家打开myeclipse的方法就是用./myeclispe
但这样有缺陷就是你的控制台是锁死的,这就是系统把myeclipse作为了一个前台进程,那么如果我们这么打开./myeclipse & 这样就能把它作为一个后台进程打开,控制台就能释放出来了)

linux如何操作进程呢,首先看看怎么查看系统进程 :

命令 ps -aux 查看当前的进程(a显示终端的所有进程信息,u表示以用户的格式显示进程信息,x表示显示后台进程参数)这里注意查看进程后发现总是会有一个1号进程,这个进程是所有进程的父进程,就好比JAVA中的Object类。有父进程就有子进程,通常子进程会随着父进程的结束而结束,如果一个子线程的父进程结束了而它本身没结束,那么这个子进程就被叫做 僵尸进程(挺有意思的概念,后面还有解释)



杀死进程的命令:

kill PID 这个命令比较轻,若发现当前进程PID对应的进程比较重要,则忽略这个命令。

kill -9 PID 这个命令是强制杀死一个进程,如果强制杀死bash进程则会被弹出去(logout效果,因为没有bash了相当于命令进程直接结束)。

动态监控进程命令:

top 能够动态查看进程

top -d 10 表示制定系统每隔十秒更新一次进程消息。

在查看模式下,输入 U 能够让你输入用户名,意思是指定监视哪个用户的进程

q键可以退出查看模式

动态查看信息如下

top - 22:40:20 up 9:21, 2 users, load average: 0.06, 0.02, 0.00

Tasks: 122 total, 2 running, 119 sleeping, 0 stopped, 1 zombie

Cpu(s): 1.2%us, 2.4%sy, 0.0%ni, 92.7%id, 0.0%wa, 2.4%hi, 1.2%si, 0.0%

Mem: 515348k total, 497932k used, 17416k free, 62204k buffers

Swap: 1052248k total, 88k used, 1052160k free, 303488k cached

第一个时间数据指的是系统当前时间,9:21代表9小时21分(如果去大公司看他们服务器的进程一般这里都是好几个月甚至一年),2 users表示有两个用户正在登陆。 load average 代表当前linux的负载程度(越小负载越低),当这三个数字加起来除以三大于0.6(即占用率超过百分之60)那就要小心了。

Task: 122 total 一共有122个进程,2个正在运行的进程,119睡眠的进程,0个停止的进程,1个僵尸进程。

介绍僵尸进程掐,先介绍一个父进程和子进程的概念:父子进程的关系是管理和被管理的关系,当父进程终止时,子进程也随之而终止。但子进程终止,父进程并不一定终止。僵尸进程的产生 通常是父进程终止,但子进程没有终止造成的,从而使子进程无法被回收。

第三行重点说 92.7%id 意思是有92.7的CPU处于闲置状态

第四行Mem指的是内存使用情况,根据英文能知道其含义

第五行Swap指的是交换分区内存,交换分区类似于windows的虚拟内存,当内存不够的时候会在磁盘中虚拟一块空间作为内存使用,一般交换分区大小在真实内存两倍是合理的。

下面介绍有关网络进程的监听和查看

我们可以通过这个命令查看网络状态 netstat -an

改进版:netstat -anp 能够显示PID查看是什么进程在监听,通过查看端口可以找到其进程号,从而能够管理这个进程

在就是上次提到的一个概念了:路由。一个网络数据从A到达B,之间是要经过许多”驿站“的,这些”驿站“就是路由,比如古代向边塞传送千里加急信,不可能让一个人骑马送去,肯定要途径一个个关口,让当地关口的信使去送,因为一个信使不可能熟悉所有的送信路线,他只知道附近几个路线,选择相对较小的路线去送信。这个特点和路由是一样的,每个路由都有一张路由表,这个路由表里面的信息其中有一部分就保存了它所能搜索到的附近的路由,选一个近的送过去(图的遍历,最短路径)。下面介绍命令:

查看数据包的传递过程 traceroute(查看经过了那些路由)

查看路由情况 命令:route 显示一个路由表。路由表中记录了这个路由和它最近的路由。

接下来介绍linux中任务的调度

现在有一个需求,老板要求员甲每天备份一下数据库,大家知道一个好网站是需要一个强大的底层数据库来持久化数据的,数据库中的数据应该是最值钱的,一旦数据丢失造成的损失也是相当大,所以公司通常会要求员工每天或者一段时间备份数据库;而备份数据库也是有技术的,不是说上午十点下午两三点随便一个时间就能备份,我们知道备份数据库实际上是对数据库进行读取,而且当一个数据库内容比较多的时候这个读取操作很耗时,一旦在上网高峰期使用这个操作,那么访问你公司网站的人就卡死了,要是每天都在这个高峰期去备份数据库你这个网站还让不让人用了呢。所以要选择在凌晨期间上网人少的时候做,但是程序员也不可能天天都三两点睡觉呢太累了,所以就引出这个问题:有没有办法能够让系统在我指定的时间执行我要求的任务呢。

在linux下,我们可以编写一段脚本,比如date >> /home/date 这段脚本是说在/home/date目录中记录当前时间,如果我想每天两点记录一次呢?这里就要用到linux的任务调度,使用命令:crontab -e 我们会进入一个像vi编辑器一样的地方,输入 i 进入编辑模式,写这么一段脚本:0 2 * * * date >> /home/date 这就能让这段脚本每天两点执行了。

说说哦这是什么意思哈,前面的数字和* 代表时间。第一个代表分钟,第二个小时,第三个代表日期,第四个代表月份,第五个代表星期几。数字要符合逻辑规范,*是通配符的意思就是每隔这么一个时间段都执行。这样命令就开始调度了。当然如果命令错误或者时间单位设置不对,就不执行。

写多行这样的脚本就能实现多个任务的调度,不过实际上我们可以这么做:把我们要执行的脚本写到一个.sh文件中, * * * * * /root/run.sh 多行这样的脚本来执行我们的命令。学习过JAVA或者其他面向对象语言的同学应该有这么一个面向对象的封装的编程习惯,我们总不能吧所有的任务的命令裸露的写到这个任务调度中吧,我们可以以一个文件作为一个任务来进行管理,显得有层次比较调理。

其他的命令介绍

任务的终止:crontab -r

列出任务:crontab -l

好了,今天就介绍到这里。linux学习已经有五天了,进步还是挺大的,虽然没法用现成的知识去做些什么项目,但是有一个linux下操作的基本概念和使用经验,今后用得多了自然就会了。再次建议大家学习完一个知识,一定要去练习,不要求做出多磨牛逼厉害的东西,做起码的demo要敲一下,等到练习的相对娴熟了再去做大的事情。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐