你的位置:首页 > 操作系统

[操作系统]linux(六)__进程与任务控制


一、程序、进程、线程

1.程序是一个普通文件,是一系列指令和数据的集合,是一个静态的实体,是程序员写好之后存储于外设之上的代码。它是"死"的,而进程和程序都是"活"的。

2.进程是程序的执行实例,即运行中的程序,同时也是程序的一个副本;程序是放置于磁盘的,而程序是位于内存中的。每一个进程都分配一个ID号。

    每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。例如WWW服务器。

3.线程是比进程更小的执行单元,一个进程至少包括一个线程。一个进程要想同时在多颗CPU上运行,必须得分成互不影响的多个执行流,这些执行流就是线程。

   进程有独立的内存地址空间,线程没有

   线程不能独立存在,它是由进程创建的。(在linux下是fork,在java下是Thread)

 

二、进程的分类

按照进程的功能和运行的程序分类,进程可划分为两大类:

 系统进程:可以执行内存资源分配和进程切换等管理工作;而且,该进程的运行不受用户的干预,即使是root用户也不能干预系统进程的运行。

 用户进程:通过执行用户程序、应用程序或内核之外的系统程序而产生的进程,此类进程可以在用户的控制下运行或关闭。

针对用户进程,又可以分为交互进程、批处理进程和守护进程三类。

 交互进程:由一个shell终端启动的进程,在执行过程中,需要与用户进行交互操作,可以运行于前台,也可以运行在后台。

 批处理进程:该进程是一个进程集合,负责按顺序启动其他的进程。

 守护进程:守护进程是一直运行的一种进程,经常在linux系统启动时启动,在系统关闭时终止。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。

   例如httpd进程,一直处于运行状态,等待用户的访问。还有经常用的crond进程,这个进程类似与windows的计划任务,可以周期性的执行用户设定的某些任务。

 

二、ps命令—静态显示系统执行的进程

ps命令是用来查看目前系统中,有哪些正在执行,以及它们执行的状况。可以不加任何参数

显示详细的进程信息

1、 ps -a :意思是说显示当前终端的所有进程信息。

2、以用户的格式显示进程信息。

    ps -u :以用户的格式显示进程信息。

3、显示后台进程运行参数:

    ps -x :显示后台进程运行的参数。

4、可以使用ps -aux 显示全面的进程信息。

 

Linux下显示系统进程的命令ps,最常用的有ps -ef 和ps aux。

ps -ef 是用标准的格式显示进程的、其格式如下

其中各列的内容意思如下
UID    //用户ID、但输出的是用户名 
PID    //进程的ID 
PPID    //父进程ID 
C      //进程占用CPU的百分比 
STIME  //进程启动到现在的时间 
TTY    //该进程在那个终端上运行,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。 
CMD    //命令的名称和参数

ps aux 是用BSD的格式来显示、其格式如下

同ps -ef 不同的有列有
USER      //用户名 
%CPU      //进程占用的CPU百分比 
%MEM      //占用内存的百分比 
VSZ      //该进程使用的虚拟內存量(KB) 
RSS      //该进程占用的固定內存量(KB)(驻留中页的数量) 
STAT      //进程的状态 
START    //该进程被触发启动时间 
TIME      //该进程实际使用CPU运行的时间

其中STAT状态位常见的状态字符有
D      //无法中断的休眠状态(通常 IO 的进程); 
R      //正在运行可中在队列中可过行的; 
S      //处于休眠状态; 
T      //停止或被追踪; 
W      //进入内存交换 (从内核2.6开始无效); 
X      //死掉的进程 (基本很少见); 
Z      //僵尸进程; 
<      //优先级高的进程 
N      //优先级较低的进程 
L      //有些页被锁进内存; 
s      //进程的领导者(在它之下有子进程); 
l      //多线程,克隆线程(使用 CLONE_THREAD, 类似 NPTL pthreads); 
+      //位于后台的进程组;

 

四、终止进程kill/killall

终止某个进程:kill 进程号

kill 16251 :表示终止进程号为16251的进程。

kill -9 16251 :因为有些进程会捕捉某些信号。如果直接不能结束进程可以用“-9”传送信息。强制终止

killall  进程名    可以清除进程及进程相关的子进程

killall  -u   username  可以杀死某一用户的所有进程

 

五、前后台作业管理

  • 前台作业:占据了命令提示符

  • 后台作业:启动之后,释放命令提示符,后续的操作在后台完成

 

前台-->后台:

     ①Ctrl+z: 把正在前台的作业送往后台,并且作业处于Stopped状态

     ②COMMAND &:让命令在后台执行

后台-->前台

     fg  标号

bg让后台停止的作业继续运行

fg让后台的作业调往前台

jobs查看后台所有作业

 

六、动态监控进程top  退出top按q键或ctrl+c键即可退出

top与ps命令很相似。它们都用来显示正在执行的进程。top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的进程。

退出:ctrl+c

1、监视特定用户

  top :输入此命令,按回车键,查看执行的进程。

    u :然后输入"u"回车,再输入用户名,即可。

2、终止指定的进程

  top :输入此命令,按回车键,查看执行的进程。

    k :然后输入"k"回车,再输入要结束的进程ID号。

3、指定系统状态更新的时间

  top -d 10 :指定系统更新进程的时间为10秒。

 

 

14:06:22 up系统时间

 4 min, 系统启动多久

1 user, 当前登陆到linux有多少用户

load avcragc: 0.02, 0.12, 0.07负载平衡,当前系统的负载情况(可全加除3大于0.6表示系统负载紧张)

37 processes:当前进程数

36 sleeping, 休眠状态进程数

1 running, 正在运行进程数

0 zombie,僵尸进程数 进程无用后仍占用内存的进程数

0 stopped处于停止状态的进程数

CPU states:  0.0% user  0.1% system  0.0% nice  0.0% iowait 99.8% idle

CPU的状态  idle为CPU闲置状态(越大越好)

Men:   255264k av,  39420k used,  215836k free,   0k shrd,  5520k buff

                    30632k actv,     140k in_d, 292k in_c

内存使用情况

255264k av,内存总数量

39420k used,正在使用内存数量

215836k free,空闲内存数量

Swap:  257032k av,      0k used,  257032k free           19376k cached

swap分区(虚拟内存)使用情况

swap:  257032k av,swap分区(虚拟内存)数量

0k used, 正在使用虚拟内存数量

257032k free空闲虚拟内存数量

19376k cached缓存内存 

 

七、任务调度命令

概述:

    任务调度:是指系统在某个时间执行的特定的命令或程序。

    任务调度分类:

      1、系统工作:有些重要的工作必须周而复始的执行。如病毒扫描等。

      2、个别用户工作:个别用户可能希望执行某些程序。

 

设置任务调度文件:/etc/crontab

设置个人任务调度。执行crontab -e命令。接着输入任务到调度文件

例:5 * * * * ls -l /etc/ > /tmp/to.txt

    意思说每小时的第五分钟执行ls -l /etc/ > /tmp/to.txt命令

任务调度的使用crontab

1、设置任务 crontab -e

2、每隔一定时间去执行

  date > /home/mydatal (将当前时间覆盖写入mydata1文件中。>为覆盖写)

  date显示当前时间

 1)希望每天凌晨2:00去执行 date >> /home/mydate2 (>>为追加写)

  0 2 * * * date >> /home/mydate2

 2)希望每分钟去执行

  * * * * * date >> /home/mydate2

 

调度文件规则:

字段名称      说明                       范围

分钟          每小时中的第几分钟执行     0-59

小时          每日的第几个小时执行       0-23

日期          每月的第几天执行           1-31

月历          每年的第几个月执行         1-12

星期          每周的第几天执行           0-6

命令名称      欲执行的命令名称及其参数

 

3、怎样去调度多个任务?

   1)在crontab -e 中直接写多个任务  (优点:简单;缺点:太多太乱修改不方便)

   2)可以把所有的任务,写入到一个可执行文件(shell编程)推荐

.sh文件为shell文件,chmod 744 mytask.sh 要使它成为可执行文件  切记

     vi mytask.sh

        date >> /home/mydate2

        cp /home/mydate2 /root/

     :wq

     crontab -e

     * * * * * /root/mytask.sh

4、如何终止任务

终止任务调度:

    crontab -r :终止任务调度  (多任务多用户使用时禁用此命令)

    crontab -l :列出当前有那些任务调度