| 
       
	进程管理 
	进程常用命令 
	  |- w查看当前系统信息 
	  |- ps进程查看命令 
	  |- kill终止进程 
	  |- 一个存放内存中的特殊目录/proc 
	  |- 进程的优先级 
	  |- 进程的挂起与恢复 
	  |- 通过top命令查看进程 
	计划任务 
	  |- 计划任务的重要性 
	  |- 一次性计划at和batch 
	  |- 周期性计划crontab 
	  
	进程管理的概念 
	进程和程序区别 
	1.程序是静态概念,本身作为一种软件资源长期保存;而进程是程序的执行过程,它是动态概念,有一定的生命期,是动态产生和消亡的。 
	2.程序和进程无一一对应关系。一个程序可以由多个进程共用;另一方面,一个进程在活动中有可顺序地执行若干个程序 
	 
	父子进程的关系 
	1.子进程是由一个进程所产生的进程,产生这个子进程的进程称为父进程 
	2.在linux系统中,使用系统调用fork创建进程。fork复制的内容包括父进程的数据和堆栈段以及父进程的进程环境。 
	3.父进程终止子进程自然终止。 
	 
	前台进程和后台进程 
	前台进程 
	在shell提示处理打入命令后,创建一个子进程,运行命令,Shell等待命令退出,然后返回到对用户给出提示符。这条命令与Shell异步运行,即在前台运行,用户在它完成之前不能执行别一个命令。 
	后台进程 
	在Shell提示处打入命令,若后随一个&,Shell创建子进程运行此命令,但不等待命令退出,而直接返回到对用户给出提示。这条命令与Shell同步运行,即在后台运行。“后台进程必须是非交互式的” 
	  
	进程的状态 
 
	  
	  
	◆运行状态(TASK_RUNNING) 
	当进程正在被CPU执行,或已经准备就绪随时可由调度程序执行,则称该进程为处于运行状态(running)。进程可以在内核态运行,也可以在用户态运行。当系统资源已经可用时,进程就被唤醒而进入准备运行状态,该状态称为就绪态。这些状态(图中中间一列)在内核中表示方法相同,都被成为处于TASK_RUNNING状态。 
	 
	◆可中断睡眠状态(TASK_INTERRUPTIBLE) 
	当进程处于可中断等待状态时,系统不会调度该进行执行。当系统产生一个中断或者释放了进程正在等待的资源,或者进程收到一个信号,都可以唤醒进程转换到就绪状态(运行状态)。 
	◆暂停状态(TASK_STOPPED) 
	当进程收到信号SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU时就会进入暂停状态。可向其发送SIGCONT信号让进程转换到可运行状态。 
	 
	◆僵死状态(TASK_ZOMBIE) 
	当进程已停止运行,但其父进程还没有询问其状态时,则称该进程处于僵死状态。 
	 
	◆不可中断睡眠状态(TASK_UNINTERRUPTIBLE) 
	与可中断睡眠状态类似。但处于该状态的进程只有被使用wake_up()函数明确唤醒时才能转换到可运行的就绪状态。 
	  
	当一个进程的运行时间片用完,系统就会使用调度程序强制切换到其它的进程去执行。另外,如果进程在内核态执行时需要等待系统的某个资源,此时该进程就会调用 
	sleep_on()或sleep_on_interruptible()自愿地放弃CPU的使用权,而让调度程序去执行其它进程。进程则进入睡眠状态(TASK_UNINTERRUPTIBLE或TASK_INTERRUPTIBLE)。 
	 
	只有当进程从“内核运行态”转移到“睡眠状态”时,内核才会进行进程切换操作。在内核态下运行的进程不能被其它进程抢占,而且一个进程不能改变另一个进程的状态。为了避免进程切换时造成内核数据错误,内核在执行临界区代码时会禁止一切中断。 
	  
	PS: 
	进程已死亡,但父进程没有收尸,该进程就成僵尸进程 
	僵尸进程不打开任何文件,几乎不占内存,但是占据进程表的资源,进程表记录pid、进程状态、CPU时间等 
	僵尸状态是每个子进程结束时必经的状态 
	系统监控中出现大量僵尸进程,应检查其父进程代码 
	  
      (责任编辑:IT) |