程序和资源管理与开机流程-鸟哥的Linux私房菜基础版本(第二版)笔记13 | 梦回起点—试着去表达
ڼС
梦回起点—试着去表达
只为不让自己变成我讨厌的人
本站基于WordPress—主题by 设计窝
冀ICP备15003737号
梦回起点
Copyright © 2015-2018 All rights reserved.

程序和资源管理与开机流程-鸟哥的Linux私房菜基础版本(第二版)笔记13

什么是进程
Linux的多用户,多任务环境
     多人环境
     多系统行为
     多重登录环境的7个基本终端窗口
         详细资料可以查看/etc/inittab文件
     特殊的程序管理行为
     bash环境下的作业管理
         cp file1 file2 & 表示复制文件1 为文件2 &表示在后台执行
     多用户,多任务的系统资源分配
作业管理 & ctrl+z jobs fg bg kill
     要进行bash的作业管理,必须要注意的限制有:
         程序必须是shell的子进程
         程序不能等待 terminal/shell的输入
         直接将命令放到后台执行 &
         前台:您可以控制的作业称作前台作业
         后台:在内存可以自行运行的作业 ,您无法直接控制它。
         后台执行的任务输出依然会输出到屏幕上,可以通过重定向到文件
     将当前作业放到后台 暂停 ctrl+z
         注意是暂停
     观察当前后台作业状态jobs
         选项:
             -l 除了列出作业号之外同时列出PID
             -r 仅列出正在后台运行的作业
             -s 仅列出正在后台暂停的作业
     将后台作业拿到前台fg
         格式 fg %jobnumber  作业号%可省
     将作业在后台运行bg
         让ctrl+z暂停的任务后台运行
     管理后台的任务kill
         选项:
             -l 列出当前kill能够使用的信号
             signal 表示后面的作业什么指示
             -1 重新读取一次参数设置文件
             -2 表示由键盘输入 ctrl+c
             -9 表示立刻强制删除作业
             -15 以正常方式终止一项作业
进程管理
进程的观察
     ps 查看系统上正在运行的进程
     选项:
         -A 所有的进程均显示出来,与-e效果相同
         -a 与终端无关的所有进程
         -u 有效用户的相关进程
         x 列出较完整的信息
     输出格式:
         l 较长,较详细的显示PID的信息
         j 作业的格式
         -f 更完整的输出
     相关信息的含义:
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000  2748  2741  0  80   0 –  2181 wait   pts/2    00:00:01 bash
0 R  1000  5650  2748  0  80   0 –  1615 –      pts/2    00:00:00 ps
     F 表示这个进程的标志(flag) 4表示用户为超级用户
     S 表示这个进程的状态
     PID 进程ID PPID父进程ID
     C CPU占用的资源百分比
     PRI priority 优先级的缩写
     NI Nice值
     ADDR 核心功能,指出该进程在内存的哪一部分,运行的进程一般为-
     SZ 用掉的内存大小
     WCHAN 当前进程是否正在运行,-表示正在运行
     TTY 登陆者的终端位置
     TIME 用掉的CPU时间
     CMD 所执行的命令
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1   4580  2536 ?        Ss   Nov11   0:03 /sbin/init
root         2  0.0  0.0      0     0 ?        S    Nov11   0:00 [kthreadd]
     USER 该进程属于哪个用户账号
     PID 该进程的号码
     %CPU 该进程使用的cpu资源百分比
     %MEM 该进程所占用的物理内存百分比
     VSZ 该进程所使用的虚拟内存量(KB)
     RSS 该进程所占用的固定内存量(KB)
     TTY 该进程是在哪个终端上运行的,与终端无关会显示?
     STAT 该进程当前状态
         R 运行
         S 休眠
         T 检测或停止
         Z 僵尸
         Ssl
         S<
         R+
         Ss
         SN
     START 该进程所触发启动的时间
     TIME 该进程实际所使用CPU的时间
     COMMAND 该进程的实际命令
     当发现大量僵尸进程的时候应该检查系统和父进程,不要盲目的kill
    top [-d] | top [-bnp]
     选项:
         -d 后面可以接秒数,就是整个进程画面更新的秒数,默认是5秒
         -b 以批处理的方式执行top 通常会搭配数据流重定向,结果输出到文件
         -n 与-b搭配 意义是:要进行几次top输出
         -p 指定每个PID进行检测
     按键:
         ?    显示top中可以使用的按键
         P    按CPU使用资源排序
         M    按内存使用排序
         N    按PID排序
         T     按该进程使用的CPU累积(time+)排序
         k    给某个PID一个信号
         r    给某个PID重新确定一个值
     pstree
     选项:
         -A 各进程之间的ASCII字符来连接
         -p 同时列出各个进程的PID
         -u 同时列出各个进程所属各个账号的名称
进程的删除
     代号    名称        内容
      1        SIGHUP        类似重新启动
      2         SIGINT        ctrl+c
      9        SIGKILL        强制中断一个程序的执行
      15        SIGTERM        正常结束进程
     kill后面直接加数字和加上%是不同的
     killall
     选项:
         -i interactive的意思,交互式的,提示
         -e exact 表示后面接的command name一致 但整个完整命令不能超过15字符
         -I 命令名称可以忽略大小写
系统资源的观察
     free [-b|-k|-m|-g] [-t]
     选项:
         -b 直接输入free时 显示的单位是KB,可以通过几个参数设置单位
         -t 在输出的最终结果显示物理内存和虚拟内存的总量
     uname [-asrmpi]
     选项:
         -a 所有系统相关的信息
         -s 系统核心的名称
         -r 核心的版本
         -m 本系统的硬件名称
         -p cpu类型
         -i 硬件的平台
     uptime 显示当前系统已经开机的时间
     netstat [-atunlp]
     选项:
         -a 将当前系统上所有的联机,监听,socket数据列出来
         -t 列出tcp网络包的数据
         -u 列出udp网络报的数据
         -n 不以进程的服务名称,以端口号来显示
         -l 列出当前正在网络监听的服务
         -p 列出该网络服务的进程PID
     含义:
         Proto    网络的包协议
         Recv-Q    非由用户进程连接到此socket的复制的总字节数
         Send-Q     非由远程主机传送过来的应答的总字节数
         Local Address    本地端的 IP
         Foreign Address 远程主机的IP
         State     联机状态
     dmesg 输出所有的核心开机时的信息
     sar 检测主机的资源状态,然后绘制图表
     选项:
         -u 进行cpu资源的统计
         -r 进行主存储器当前状态的分析
进程的执行顺序
     在ps -l中
     PRI值越小表示优先级越高 PRI值是由系统动态产生的,不是固定值
     nice值是我们提供的
     PRI(new) = PRI(OLD) +nice
     一般用户的nice为0-19
     root 的为 -20-19
     一般用户仅可以将nice值调高,且仅能调整属于自己的进程
     调整nice的方法:
         开始执行的时候就提供一个特定的nice 用nice命令
         调整已经在执行的程序用renice
     nice
         nice [-n] command
     选项:
         -n 后面接一个值,-20-19
     renice
         renice [number] command
     参数:
         PID 某个进程的ID
特殊文件与进程
/proc/*的意义
     内存中的数据都写入到proc目录中
     /proc/*/cmdline 启动这个进程的命令串
     /proc/*/environ 启动这个进程的环境变量的内容
     /proc/cmdline 加载kernel执行的相关参数
     /proc/cpuinfo 本机CPU的相关信息,包括频率,类型,运算功能等
     /proc/devices 记录了系统各个设备的代号
     /proc/filessystem    记录了当前系统已经加载的
     /proc/interrupts 当前系统上的IRQ分配状态
     /proc/ioports 当前系统上各台设备所配置的io地址
     /proc/kcore 内存大小 不要读它
     /proc/loadavg top和uptime里的三个平均数都来自这个文件
     /proc/meminfo 使用free列出的内存信息都可以在这里查到
     /proc/modules 列出linux当前已经加载的模块列表
     /proc/mounts 系统已经载入的数据,就是用mount命令调出来的
     /proc/swaps 记录使用的分区
     /proc/partitions 使用fdisk -l会显示当前所有的分区,在这个文件中记录
     /proc/pci 在pci总线上每台设备的详细情况
     /proc/uptime 用uptime会出现的信息
     /proc/version 核心的版本信息
     /proc/bus/* 一些总线的配置
查询一打开的文件或已执行进程打开的文件
     fuser [-ki] [-signal] file/dir
     选项:
         -k 找出使用该文件、目录的PID 并试图将signal发送给该进程
         -i 必须与-k配合 在删除PID前会给出提示信息
         -signal 如果不添加,默认是9号信号(SIGKILL)
         duxing@ubuntu:/tmp$ fuser .
         /tmp:                 2748c
         其中c的含义:
             c 在当前目录下
             e 可以执行
             f 一个打开的文件
             r 表示根目录
通过一个进程查询打开的文件
    lsof [-Uu] [+d]
     选项:
         -a 需要多项数据 同时成立 才显示出结果的情况
         -U 仅列出类UNIX 系统的socket文件类型
         -u 后面接用户名 列出该用户相关进程所打开的文件
         +d 后面接目录,即找出某个目录下已经打开的文件
    pidof
     选项:
         -s 仅列出一个PID而不列出所有PID
         -x 同时列出该程序名可能的PPID进程的PID
    
    

启动流程
     加载BOIS的硬件信息并获取第一个启动设备的代号
     读取第一个启动设备的MBR的引导加载程序的启动信息
     加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有硬件
         核心文件一般解压到/boot 取名为/boot/vmlinuz
     核心执行init 并获取运行信息
     init执行/etc/rc.d/rc.sysinit文件
     启动核心的外挂模块(/etc/modprobe.conf)
     init执行运行的各个批处理文件
     init执行/etc/rc.d/rc.local文件
     执行bin/login 等待用户登录
     登录之后用shell控制主机
第一个程序init及设置文件/etc/inittab runlevel
     6个运行等级
     0-halt 系统直接关机
     1-single user mode 单用户维护模式,用于系统出问题时进行维护
     2-Multi-user,without NFS 类似等级3但是无NFS服务
     3-Full multi-user mode 完整的含有网络功能的纯文本模式
     4-unused 系统保留
     5-X11  与3相同,只不过使用 X Winodw
     6-reboot 重新启动
     等级是从inittab文件中设置的
     文件语法:
         [设置项目]:[run level]:[init的操作行为]:[命令项目]
         设置项目:
             最多设置4个字符,表示init的主要工作项目,只是一个简单的表示
         运行等级:
             该项目在那些等级下执行 35 表示会在3  和5等级下执行
         init的操作行为:
             initdefalut 表示默认的运行等级设置值
             sysyinit 表示系统初始化的操作项目
             ctrlaltdel 表示后面接[ctrl]+[alt]+[del]三个键是否可以重新启动
             wait 后面可以接的命令项目必须要执行完毕才能继续随后的操作
             respawn 后面接的init仍会主动重新启动
         命令项目:
             即应该可以执行的命令,通常是一些脚本
init处理系统初始化流程 (/etc/rc.d/rc.sysinit)
     /etc/rc.d/rc.sysinit 的主要工作:
         获取网络环境与主机类型
         测试与载入内存设备/proc及USB设备/sy
         决定是否启动SELinux
         接口设备的检测与即插即用(PnP)苍蝇的测试
         用户自定义模块的加载
         加载核心的相关设置
         设置系统时间
         设置终端控制台
         设置RAID与LVM等硬盘功能
         以fsck检测磁盘文件系统
         进行磁盘配额quota的交换(非必要)
         重新以可读取模式载入系统磁盘
         启动quota功能
         启动系统随机数设备
         清除启动过程中的临时文件
         将启动相关信息加载到/var/log/dmesg文件中
     /etc/rc.d/init.d/* 其中*以S开头表示启动时需要的服务,k开头表示关机
     需要的服务 S K后面接的数字表示该文件的执行顺序
用户自定义引导启动程序
     想要在启动时就执行的工作,可以将shell文件存在/etc/rc.d/rc.local 启动时
     就会执行
根据/etc/inittab 设置加载终端或X-Winodw界面
变换运行等级
     可以通过修改/etc/inittab来修改 (永久修改)
     init N (临时修改)
     可以通过runlevel查看当前等级
核心与核心模块
     核心一般都是与压缩文件,需要解压缩后才能加载到主存储器
     核心与核心模块放在哪?
         核心 /boot/vmlinuz 或 /boot/vmlinuz-version
         核心解压缩所需的RAM disk /boot/initrd
         核心模块 /lib/modules/version/kernel
         核心源码 /usr/src/linux(安装才有)
核心模块与依赖性
     通常核心模块放在/lib/modules/uname -r/kernel
         arch  与硬件平台相关的项目,如cpu等级
         crypto  核心所支持的加密技术 如md5 des
         drivers    一些硬件的驱动程序,如显示卡网卡
         fs      核心所支持的文件系统
         lib      一些函数库
         mm     
         net      与网络有关的各项协议数据,还有防火墙模块
         sound      与音效有关的各模块
     /lib/modules/uname -r/modules.dep 记录了核心支持模块的依赖性
     可以用depmod命令建立该文件
     depmod
     选项:
         -A 不加任何参数,depmod会主动 分析当前核心的模块,并写入
             /lib/modules/uname -r/modules.dep 加-A只会搜索更新的
         -n 不写入/lib/modules/uname -r/modules.dep 只是将结果输出到屏幕
         -e 显示出当前已加载的不可执行的模块名称
核心模块的观察lsmod、modinfo
     lsmod 查看核心加载了多少模块
     modinfo [-adln] [module_name|filename]
     选项:
         -a 仅列出作者名称
         -d 仅列出该模块的说明(description)
         -l 仅列出授权(license)
         -n 列出该模块的详细路径
核心模块的加载与删除insmod、modprobe、rmmod
     modprobe 会主动分析模块之间的联系
     选项:
         -c 列出当前系统所有的模块
         -l 列出当前在/lib/modules/uname -r/kernel中的所有模块文件名
         -f 强制加载该模块
         -r 类似rmmmod 删除某个模块
    insmod 完全由用户自行加载一个完整文件名的模块,不会主动分析依赖性
     rmmod 删除一个模块
     选项:
         -f 强制删除,不管是否在使用
         -w 若该模块在使用就等结束以后再删除

2015-12-25
程序和资源管理与开机流程-鸟哥的Linux私房菜基础版本(第二版)笔记13已关闭评论