15-服务及进程管理 本文共有5440个字,关键词: linux进程及作业管理 CPU划分为时间片(timeslice),分配给程序使用,根据优先级确定给哪个程序使用 内核负责进程的管理 CPU中有一个指针指令寄存器,其中记录的是下一条命令的指针(地址),保存当前进程的状态 内核的功能:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能 进程有生命周期,进程在内核中称为任务 task,struct,任务结构体,linux内核存储进程信息(元数据)的固定格式。 数组在内存中必须是连续的空间 链表在尾部加上指针,指向下一个数据 多个任务的task,strct组成的链表:task list任务列表 当中断发生时,必须由内核接管CPU 进程的创建:进程都是由父进程创建, 如果不写入数据则公共使用共享数据,只有在子进程需要写入数据时再copy一份进行写入操作,COW,写时复制。 子进程是父进程为完成某个功能创建的,子进程结束后由父进程销毁。 进程的优先级:0-139 0-99 (0很少使用)实时优先级,数字越大优先级越高 100-139 用户可调整优先级,数字越小,优先级越高 nice值:(-20)到(+19),对应100-139 通过调整nice值改变进程的优先级: 每个优先级有两个队列,一个为运行队列,一个为过期队列,每次只扫描140个运行队列的首部,当运行时间结束,与过期队列调换继续在CPU上运行。 内核负责资源的分配: 为了完成现代操作系统的管理,内核将自身在占用以外的内存划分为4K大小(页框),用于存放页面数据,页框:page Rfame 内核采用虚拟内存机制,使得每个程序都认为自己是独占内存,线性地址。线性地址与实际地址的对应关系由内核管理。 MMU:memory management unit,CPU中的内存管理单元,负责实时转换线性地址为真实地址。 缺页异常:内存中的页面不存在了,可能是被交换出去了,也可能在硬盘上存储,内存中的数据不是所有都可以交换的。 必须存在于内存中的,称为常驻内存级; 可以交换出去的,称为虚拟内存级。 IPC:Inter porcess communication 进程间通信 同一主机:single发信号 shm:shared memory 跨主机:socket 套接字 RPC:Remote Procecure Call 远程过程调用 linux内核:抢占式多任务 进程类型: 守护进程daemon,在系统引导过程过程中启动的进程,根终端无关的进程 用户进程:前台进程,跟终端相关,通过终端启动的进程。 进程状态: 运行态:running 就绪态(睡眠态) 可中断睡眠:Interruptable 不可中断睡眠:uninterruptable 等待数据载入 当一个进程向内核申请从磁盘获取数据时,内核先间数据载入内核空间,再将数据复制到进程内存中啊,一次IO分两段运行 停止态:stopped,暂停于内存中,但是不会被调度,除非手动启动 僵死态:Zombie,没有被回收的进程 进程分类: CPU-Bound CPU密集型,一般为非交互式 IO-Bound IO密集型,一般为交互式,交互式需要立即反应,因此优先级较高 家目录下的配置文件,只针对单个用户生效 ~/.bashrc 定义别名等 ~/.bash_profile 定义PATH环境变量 /etc/针对所有用户生效的配置文件 /etc/bashrc PS1、PATH、UID /etc/profile PATH、EUID(进程的有效用户ID) /etc/profile.d/*.sh 环境的执行顺序 ~/.bash_profile --> ~/.bashrc --> /etc/bashrc --> /etc/profile --> /etc/profile.d/*.sh ~/bash_logout该配置文件(脚本)会在正常退出终端时执行 ~]#id -ru #显示用户的真实UID /etc/issue 登录显示的信息 /etc/issue.net 远程登录时显示的登录信息(需要开启ssh调用),在登录完成后显示 /etc/ssh/sshd_config中Banner开启并指向/etc/issue.net文件 /etc/motd 不区分登录方式显示提示信息 ~]# stty -a #查看所有快捷键 centOS6中让自己写的脚本或者源码支持chkconfig 向放入/etc/init.d/下的脚本中添加两行信息 # chkconfig: 2345(生效的级别) 10(启动的顺序) 90(关闭的顺序) # description: 服务的描述信息 ~]# chkconfig -add 脚本名 验证是否成功:echo $? ~]# chkconfig --list |grep 服务名 #检查是否安装加入开机自启动 模块加载: /lib/modules/2.6.32.*/kernel ~]# lsmod #列出当前已启用的所有模块 ~]# modinfo Mode_Name #查看指定模块的详细信息,所有支持的模块都能够查看 ~]# modprobe Mode_Name #装载指定的模块到内核 当新加入一个模块(复制到目录下)时,本机不能够立即识别,需是同平台模块。 ~]# depmod #扫描模块,将新的模块信息写入 /lib/mudulles/2.6.32.*/modeles.dep 保存模块信息的模块,只有在modules.dep文件 ~]# modprobe -r MOD_NAME #卸载指定模块 系统管理: 进程是一个状态,是计算机中的程序关于某数据集合上的一次活动 线程是进程处理的最小单位,也称为轻量级进程 例如用户访问80的请求为线程 程序是代替人管理操作系统,完成特定的任务,解决特定问题的一段代码集合 ~]# ps aux (以BSD风格显示) USER 由哪个用户产生 PID 进程号 %CPU CPU使用百分比 %MEM 内存使用占比 VSZ 虚拟内存级,占用虚拟内存的大小 RSS 常驻内存级,占用真实内存的大小 tty 登录终端 STAT 进程状态 S 休眠状态 R 正在运行的程序 + 处于前台的进程 N 优先级较低的进程 < 优先级较高的进程 ! 多进程的(包含有子进程) s 进程的领导者 D 无法中断的休眠状态(uninterruptable) T 停止或被追踪 Z 僵尸进程,有些情况下,父进程被销毁,但是子进程驻留内存 L 被锁定进内存的进程,与系统启动相关 当windows蓝屏时报错为段内存地址空间,可通过这个地址判断蓝屏的原因 START 进程启动时间 TIME 进程运行的时间(在CPU上运行的总时间) COMMAND 由哪个命令产生的此进程 ~]# ps -le F 当前进程的权限 1 进程可复制 4 进程使用超级管理员权限 PPID 父进程 S 进程状态 C CPU使用占比 PRI 进程优先级(80或-40) PRI决定了进程获取资源的优先级 NI nice值 [PRI最终值=PRI原值+NI(可修改)] 可通过修改NI值来影响进程的优先级 ADDR 进程在内存中的地址(不锁定不显示) SZ(size) 进程占用内存大小 WCHAN 进程是否运行("-"表示正在运行) 优先级: NI的范围:("-20"到"+19") 普通用户只能调大NICE值0-19 1. nice -n # service httpd start #服务启动时指定优先级 2. renice -# PID #更改指定进程的优先级 默认NI为0 PRI为80 ~]# top [option] -d 秒数,指定刷新时间,默认为3秒 -b 使用批处理模式 -n # 指定次数,常与-b一同使用 -p PID #查看指定PID进程 -u 用户名,只看某一用户运行的进程 -s 安全模式,避免在交互式下出现错误 ~]# pstree [option] #进程树查看 -p 显示程序进程号 -u 显示进程的用户 ~]# kill [signal] PID #默认使用15信号,正常关闭 HUP (1) 通知进程重新加载配置文件 INT (2) 终端,同ctrl+C只能终端前台(占用终端的)进程 TERM (15) 终止,正常退出 CONT (18) 继续运行 STOP (19) 暂停--Ctrl+Z ~]# killall [signal] 进程名 #杀死一类进程 -I(大) 忽略大小写 ~]# pkill -t 终端号 #结束终端用户的登录 进程号:不区分终端 工作号:区分终端(工作号只能在相应终端中查看) 工作号只有位于后台的进程才有 ~]# jobs -l #显示PID(进程号),查看工作 fg #(工作号) #将指定工作号调回前台执行,默认调回工作号后带"+"号的。 bg #(工作号) #将后台进程(停止的)运行起来,依旧运行在后台。 将命令放入后台的方式: 1. 命令 & #在命令后加上"&"符,将命令放入后台 2. Ctrl+Z ; bg #将前台的进程放入后台,在执行后台的作业 一般来说进程都是与终端相关联的,只要终端关闭,其进程也会关闭 使命令脱离终端运行的方式 1. 写入/etc/rc.local(不建议) 2. 写入cron定时任务计划任务 3. nohup 命令 操作对象 & #使命令脱离终端运行 系统资源查看 ~]# vmstat #监控系统资源 procs 进程 r 运行队列中进程数量 b 阻塞队列的数量 Memory内存 swap 如这个值大于0,则表示物理内存不够用 si 每秒从磁盘读入内存的大小 so 每秒从内存读入磁盘的大小 system in 每秒CPU的中断数,包括时钟中断 cs 每秒上下文的切换次数(资源调用的次数) ~]# dmesg #查看内核的检测信息 /var/log/dmesg #只记录这一次开机时的检测信息 ~]# free #查看内存的使用情况 -b 以字节为单位显示 -k 以KB为单位显示 -m 以MB为单位显示 -g 以GB为单位显示 查看CPU信息 1. 逻辑CPU个数 cat /proc/cpuinfo |grep "processor" |wc -l 2. 物理CPU的个数 cat /proc/cpuinfo |grep "physicalid" | sort -u | wc -l 3. 每个物理CPU中core(核心)个数 cat /proc/cpuinfo |grep "cpu cores" | uniq | awk -F ":" '{print $2}' 4. 查看core id的数量,即为物理CPU上的core的个数 cat /proc/cpuinfo |grep "core id" |uniq |wc -l 非超线程CPU算力强 超线程CPU:能同时执行更多的进程,线程为核心数的两倍 ~]# uptime #系统启动时间和平均负载(一般使用top) ~]# uname #查看系统与内核相关信息 ~]# lsb_release -a ~]# lsof #列出进程打开或者正在使用的文件信息 ~]# lsof -p PID #查看某进程运行时所调用的资源 ~]# lsof -u UID #查看指定用户运行的进程调用了哪些文件 ~]# ldd COMMAND PATH #查看指定命令执行时要调用的库函数文件 !!有些恶意软件写入函数文件中,在特定的条件下才会被触发,列如执行某个命令,此时需要排查函数文件的文件数据修改时间,如果发现异常,替换为安全的文件。 「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」 赞赏 × 几人行 (๑>ڡ<)☆谢谢老板~ 2元 5元 10元 50元 100元 任意金额 2元 使用微信扫描二维码完成支付 版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。 基础笔记综合整理 2018-10-10 评论 2536 次浏览