第五十九讲——进程之间的关系 本文共有42049个字,关键词: 在linux系统上,所有的进程都是一个进程的子进程,这个进程是init。 由内核生成init进程,此外所有进程由init进程生成,进程也是由优先级关系的。 内核尽可能的将公平的按需资源分配给各个进程。 但是在这些进程当中,必然会有一些进程的优先级,或者要实现的功能紧急性是高于其他进程的,所以我们应当优先满足这类进程的资源需求。 linux中进程的优先级共分为140个(0-139) 进程优先级的数字越小,优先级越高。其中0-99是由内核调整的,100-139由用户控制。 一般来讲,优先级越高的进程就越先执行,当同级别的进程很多时,从众多同级别进程中挑选一个也是很耗费时间的。因此,在linux2.6内核中引入了一种独特的机制,无论同级别进程队列有多长,从中找到一个进程所消耗的时间是相同的。 在计算机的程序设计上,衡量一个和程序/算法,面对不同长度的队列它的性能如何有一个标准:O O(1):无论队列有多长,从中挑选一个的时间是一样的。 O(n):线性增长,队列越长消耗的时间越多。 O(log n): O(n^2) O(2^n) 代表的是,我们从队列中挑取一个数据所需时间随队列长度变化,曲线呈现出这种函数的形式。 一个进程的优先级高一般有两种特性: 一是获得更长的CPU运行时长。 二是更优先获得CPU运行的机会。 用户可调的优先级范围为100-139 每一个进程都有一个NICE值 nice:-20-19,分别对应nice中100-139 每一个进程的默认nice值为0. 普通用户只能够调大nice值,管理员不受限制。 我们可以按照用户的权限对进程的nice值进行调整 一 如果进程已经启动,使用renice更改程序的优先级nice值 renice # PID (-20 - 19) 二 我们还可以在程序启动时为进程指定nice值(启动时默认为0) nice -n # command(命令) (-20 - 19) 内核为了追踪进程,依靠进程ID,即PID,procec ID进程号 除了init进程,其它进程都有父进程。 /proc/目录下,以数字命名的目录,每一个目录对应一个进程,目录下保存了这个进程的所有相关属性信息。。每一个进程号都是唯一的,就算进程退出了,其它进程也不会占用该进程号。 在众多的进程当中,init的进程号永远为1. /proc是伪文件系统,关机状态下该目录下是没有任何文件的。 /proc/目录下以数字命名的目录对应的进程,目录下的文件是内核中参数的映射,让我们看起来是一个文件,都是与进程相关的属性。 #pstree 进程树查看,可以很清楚的分清楚子进程和父进程。 #ps:process state(进程状态),用于查看进程的相关信息的专用命令,这个命令有很多种使用风格: linux两大阵营:BSD、system V(罗马数字5) BSD风格,所有的选项都没有短横线。 system V风格:所有的选项都需要加短横线‘-’ #ps: -a 显示所有和终端有关的进程。 -u 显示进程是由哪个用户启动 -x 显示与终端无关的进程,用问号?表示与终端无关。 进程按照与终端相关与否分为两类: 跟终端相关的进程,通过命令启动的进程。 跟终端无关的进程,随内核启动的进程。 #ps ax PID(进程号) TTY(终端) STAT(进程状态) TIME(运行时长) COMMAND(命令) STAT(进程状态) D不可中断的睡眠 R运行或者就绪 S可中断的睡眠 T停止 Z僵死态 BSD风格 < 表示优先级高的进程 N 表示优先级低的进程 +前台进程组的进程(进程组:bash下的进程。前台,从命令行运行起来的。) l 多线程进程 s 会话进程首进程 ps aux |head(默认显示10行)BSD风格 USER(进程的有效用户,发起者) PID(进程号) %CPU(占用CPU时长同所运行时长的比值) %MEM(占用内存的百分比) VSZ(虚拟内存级) RSS(常驻内存级) TTY(关联终端) STAT(进程状态) START(启动时间) TIME(运行时长,真正占用CPU的时长) COMMAND(由哪个命令启动的进程,如果命令中加了中括号,表示这是一个内核进程) #ps –elF -A|-e显示所有进程 -l 长格式显示 -F 显示更多的更详细的内容 ps –el UID(用户ID) PID(进程号) PPID(子进程号) PRI(优先级) NI(nice值) SZ(size大小) -el通常和-F一块儿使用。 ps –elF RSS(常驻内存级) PSR(正运行在哪个CPU上) 常用的有ps –elF、ps –eF、ps –ef ps –o 可以指定显示的字段,怕是命令默认只显示前台进程。 #ps –axo pid,comm,ni 只显示ps –ax中PID、COMMAND、NI字段。 #pstree显示进程树 #pgrep,以grep的形式显示进程信息。 pgrep–U root bash以root身份运行的bash进程 -u euid -U UID 例如:user1执行了一个命令,而命令的属主是root,命令的发起者为user,是以root身份运行的,此时root就是euid,即有效ID #pidof 指定一个程序名找PID(进程号) ps显示的为命令执行那一刻的信息 我们还可以使用top命令动态查看,默认每5秒刷新一次,监控系统最好用的命令之一。 top命令下列表解释: 第一行:系统时间、运行时长、登录用户、平均负载(load avrage 过去一分钟,过去五分钟,过去十五分钟的平均队列长度,值越小,CPU负载越低) 第二行:TASKS(所有进程相关信息) ntotal(n个进程)1running,n-1 sleeping,0stopped,0zombie 第三行:CPU(s)CPU的负载情况,多核心CPU可能有多行 US(userspace,用户空间,用户进程所占用的百分比) SY(内核空间占用百分比) NI(调整nice值影响的比例值) ID(空闲百分比) WA(等待I/O 完成所占用的百分比) HI(硬件中断占用时间) SI(软件中断占用时间) ST(被偷走的时间) 内存空间 SWAP交换空间 top有许多的交互式的子命令: M根据驻留内存大小进行排序(默认为CPU使用百分比排序) P 根据CPU使用百分比排序 T 根据累计时间进行排序 l:是否显示平均负载和启动时间 t: 是否显示进程和CPU状态相关信息 m 是否显示内存相关信息 c:是否显示完整命令行信息 q:退出top命令 k:终止某个进程,通过进程号 「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」 赞赏 × 几人行 (๑>ڡ<)☆谢谢老板~ 2元 5元 10元 50元 100元 任意金额 2元 使用微信扫描二维码完成支付 版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。 给自己讲linux 2017-01-28 评论 1664 次浏览