有哪些大学生必看的励志电影网站

Linux系统进程管理基本原理以及管理工具
我的图书馆
Linux系统进程管理基本原理以及管理工具
一、进程简介程序是保存在外部存储介质(如硬盘)中的可执行代码和数据的静态集合;为了某种任务而设计的软件。而进程是在CPU及内存中处于动态执行状态的计算机程序。在Linux系统中,一个程序启动后可以创建一个或多个进程,例如提供Web服务的httpd程序,当有大量用户同时访问web页面时,httpd程序可能会创建多个进程来提供服务。1.1 进程分类进程分交互进程、批处理进程、和守护进程。守护进程总是活跃的,一般是在后台运行,守护进程一般是由系统在开始时通过脚本自动激活启动或root启动。如/etc/init.d/httpd是web服务器的守护程序,使用chkconfig命令设置httpd程序的运行级别,当系统启动时,会跟着启动。1.2 进程的属性PID:进程的ID,唯一的数值,用来区分进程PPID:代表父进程以及父进程的IDUID:启动进程的用户IDGID:进程所属的组nice:进程执行的优先级tty:进程所连接的终端stat:进程的状态,一般状态分为运行R、休眠S、僵尸Z还有一点,资源的占用,如内存、cpu1.3 父进程和子进程他们的关系是管理和被管理的关系,当父进程终止时,子进程也随之而终止。但子进程终止,父进程并不一定终止。比如httpd服务器运行时,我们可以杀掉其子进程,父进程并不会因为子进程的终止而终止。在进程管理中,当我们发现占用资源过多,或无法控制的进程时,应该杀死它,以保护系统的稳定安全运行。二、进程的管理对于进程的管理是通过进程管理工具实现的,Linux系统中比较常用的进程管理命令有以下几种:2.1 查看进程ps & & & &查看静态的进程统计信息(processes statistic)top & & & 查看进程动态信息htop & & &查看进程动态信息,top的升级版pgrep & & 查询进程信息pstree & &查看进程树2.2 控制进程启动进程:分为手工启动和调度启动。手工启动分别前台启动,和后台启动。前台启动就如我们平时的services network start相同,后台启动,是把services network start这条命令放入后台运行,不占用前台的console终端使用。将“&”置于命令的最后面,进程启动后会直接放于后台运行,如service network start &。可以直接把前台启动的进程,手工再放入后台,按Ctrl+Z组合键。后台进程,调回前台:使用job命令查看后台运行的进程,结合“-l”选项显示进程的PID,后通过fg或fg PID 命令讲后台进程调入前台执行。调度启动,即计划任务,如at、crontab2.3 终止进程执行使用 Ctrl+c 终止正在执行的命令使用 kill 终止进程使用 killall 终止进程使用 pkill 终止进程xkill 桌面用的杀死图形界面的程序2.4 进程的优先级 nice renice在Linux中,进程之间是竟争资源(比如CPU的占用)关系。这个竟争优劣是通过一个数值来实现的,也就是谦让度。进程的“谦让度”是以数字形式给内核的暗示,通过它来表明一个进程在同其他进程竞争CPU时应该如何对侍这个进程,谦让度值越高,优先级越低,谦让度值越低或负值表示优先级越高。“谦让度”的值范围是-20至+19。如今很少通过手工设置进程的优先级。进程的“谦让度”值可以在创建进程时用nice命令来设置,并可以在执行时使用renice命令进行调整。Nice带一个命令行作为参数,而renice带PID或用户名作为参数可以用ps lax的输出包括父进程ID、谦让度(NI)字段等信息用nice设置一个将要执行程序的的进程的谦让值并查看,如下图:用renice改变cat /dev/zero进程的谦让度renice –4 1是cat的PID)如果所有就绪进程都具有同一优先级,那么它们将平等地共享处理器。仅当具有不同优先级的两个进程争夺CPU时间时,优先级才起作用,优先级较低的进程获得的时间较少,并且似乎运行起来更慢。
TA的最新馆藏(Mr.chicken)
(发条kitty)
(Mr.chicken)
(Mr.chicken)
第三方登录:君,已阅读到文档的结尾了呢~~
Linux_期末考试试题2
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
Linux_期末考试试题2
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口博客访问: 540008
博文数量: 94
博客积分: 1498
博客等级: 上尉
技术积分: 993
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: LINUX
在操作系统中的每一个进程必有一个父进程。相应的,每个进程可以有0个或者多个子进程。拥有同一个父进程的所有进程叫做兄弟,进程间的关系存放在进程描述符中。每个task_strut都包含有一个指向父进程的task_struct,叫parent指针,还包含有一个成为children的子进程链表。上面的这些信息无疑都是描述了一个信息,进程家族树的创建思想。由于简单的使用双向链表并不能完成的实现一个进程可以创建多个子进程,而且多个进程共有一个父进程,这就需要另想办法了。下面是我模拟创建的一个进程家族树的程序,我当中使用了5个进程。其中1,2,3是由main函数中的task_head(相当于操作系统当中的init进程,没来得及修改,和后面的参数有点重名)创建的,4,5进程是由1号进程创建的。完后打印所有存在的进程信息,注意,我这里只是对这个家族树进行描述,并不是真正的进程。#include<stdio.h>
#include<stdlib.h>
#define MAX_PID
65535 //最多创建的进程的个数
#define RDY_STATE 0 //就绪态
#define RIG_STATE 1 //运行态
#define BLK_STATE 2 //阻塞态
int PID = 1; //全局变量
typedef struct task_struct{
&&&&long pid,father;
&&&&long state;
&&&&struct task_struct *parent;//指向父亲的一个指针
&&&&struct task_struct *childHead0;//指向儿子的一个链表头
&&&&struct task_struct *brother;//指向兄弟的链表(用于将父进程创建的儿子链接在一块的链表)
}task_struct;
void addToTask(task_struct *task_head,task_struct *task){
//将一个进程所创建的子进程链接在一起
&&&&task_struct *childHead;//儿子链表的头结点(虚拟的,只是一个引导作用)
&&&&childHead = (task_struct *)malloc(sizeof(task_struct));
&&&&childHead->pid = 65535;
&&&&childHead->father = 65535;
&&&&childHead->parent = NULL;
&&&&childHead->childHead0 = NULL;
&&&&childHead->brother = NULL;
&&&&task_head->childHead0 = childHead;
&&&&task->brother = childHead->brother;
&&&&childHead->brother = task;
&&&&task->parent = task_head;
&&&&free(childHead);
task_struct *create(task_struct *task_head,int father){
&&&&task_struct *task;
&&&&task = (task_struct *)malloc(sizeof(task_struct));
&&&&task->pid = PID++;
&&&&task->father = father;
&&&&task->state = RDY_STATE;
&&&&addToTask(task_head,task);//将当前进程用头插法链接到父亲进程的儿子链表上
&&&&printf("~~~~~~~~~~~~~~~~~~~~~~~~\n");
&&&&printf(" task->pid= %ld\n task->father= %ld\n task->state= %ld\n",task->pid,task->father,task->state);//打印当前进程的信息
&&&&return task;
void init_task_struct(task_struct *task_head){
//初始化系统的init进程
&&&&task_head->pid = 0;
&&&&task_head->father = 0;
&&&&task_head->state = RIG_STATE;
&&&&task_head->parent = task_head;
&&&&task_head->childHead0 = task_head;
&&&&task_head->brother = task_head;
int main(){
&&&&task_struct *task_head;//类似于init进程
&&&&task_head = (task_struct *)malloc(sizeof(task_struct));
&&&&init_task_struct(task_head);//初始化init进程
&&&&task_struct *process1;
&&&&task_struct *process2;
&&&&task_struct *process3;//进程123由task_head创建
&&&&task_struct *process4;
&&&&task_struct *process5;//进程45由进程1创建
&&&&process1 = create(task_head,task_head->pid);
&&&&process2 = create(task_head,task_head->pid);
&&&&process3 = create(task_head,task_head->pid);
&&&&process4 = create(process1,process1->pid);
&&&&process5 = create(process1,process1->pid);
&&&&return 0;
}如果大家有什么建议可以留言,大家共同学习,谢谢
阅读(2105) | 评论(1) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
可以直接用list.h,然后配合自己写的函数应该会更好,哈哈。
请登录后评论。

我要回帖

更多关于 大学生必看的电影 的文章

 

随机推荐