Linux内核:抢占式多任务
进程类型:
1、守护进程:在系统引导过程中启动的进程,与终端无关的进程;
2、前台进程:跟终端相关,通过终端启动的进程,注意:也可把前台启动的进程送往后台,以守护模式运行;
进程状态:
运行态:running
就绪态:ready
睡眠态:a、可中断:interruptable;b、不可中断:uninterruptable
停止态:暂停于内存中,但不会被调度,除非手动启动之:stopped
僵死态:zombie
进程分类:
1、CPU-Bound:CPU密集型
2、IO-Bound:IO密集型
Linux进程查看及管理工具:pstree、ps、pgrep、pidof、top、htop、glance、pmap、vmstat、dstat、kill、pkill、job、bg、fg、nohup;
pstree – display a tree of processes;以树状显示进程
ps:显示进程状态
ps [options]…
选项:支持两种风格
常用组合:aux
u:以用户为中心组织进程状态信息显示
a:与终端相关的进程
x:与终端无关的进程
# ps uax
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
VSZ:virtual memory size;虚拟内存集
RSS:resident size;常驻内存集,即不能被交换至交换分区的
STAT:进程状态
R:running
S:interruptable sleeping
D:uninterruptable sleeping
T:stopped
Z:zombie
+:前台进程
l:多线程进程
N:低优先级进程
<:高优先级进程
s:session leader
常用组合:-ef
-e:显示所有进程相当于ps ax;
-f:显示完整格式的进程信息;
常用组合:-eFH
-F:显示更完整格式的进程信息;
-H:以进程层级格式显示进程相关信息
常用组合:-eo,axo
-o:以自定义指定字段显示
-eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
ni:nice值;
pri:优先级;
psr:运行于哪颗cpu;
rtprio:实时优先级;
ppid:父进程;
pgrep,pkill:
pgrep [options] pattern
pkill [options] pattern
-U uid:真实用户
-u uid:有效用户
-t terminal:与指定终端相关的进程
-l:显示进程名
-a:显示完整格式的进程名
-P pid:显示其父进程为此处指定进程的进程列表
pidof:根据进程名获取其pid
top:有许多内置命令:
排序:P:占据CPU时间百分比;
M:占据的内存百分比;
T:累计占据cpu时长;
首部信息显示:
l:uptime信息;
t:任务及cpu信息;
1:cpu分别显示;
m:内存信息;
q:退出命令;
s:修改刷新时间间隔;
k:kill,终止指定进程
其中cpu信息中各子项的意义:
us:用户空间
sy:内核空间
ni:nice值
id:空闲比例
wa:等待io完成
hi:处理硬件中断
si:处理软件中断
st:被虚拟化技术偷走的时间
htop命令:
s:跟踪选定进程的系统调用;
l:显示选定进程打开的文件列表;
a:将选定进程绑定至某指定cpu核心;
t:显示进程树;
vmstat:报告虚拟内存的使用信息
vmstat [options] [delay [count]]
procs {r:等待运行的进程的个数;
b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度);}
memory {swpd:交换内存的使用总量;
free:空闲物理内存总量;
buff:用于buff的内存总量;
cache:用于cache的内存总量}
swap {si:数据进入swap中的数据速率(kb/s)
so:数据离开swap中的数据速率(kb/s)}
io {bi:从块设备读入数据到系统的速率(kb/s)
bo:保存数据至块设备的速率(kb/s)}
system {in:中断速率
cs:进程切换的速率}
cpu {us:用户空间
sy:内核空间
id:空闲比例
wa:等待io完成所消耗的时间比例
st:被虚拟化技术偷走的时间比例}
选项:
-s:显示内存的统计数据
pmap – report memory map of a process:显示指定进程ID号的内存映射关系
选项:
-x:显示详细格式的信息;
其真实文件保存在:/proc/PID/maps;
glances – A cross-platform curses-based system monitoring tool:跨平台的基于指针的系统监控工具
内建命令:h:获取帮助
C/S模式下运行glances命令:适合于内网监控。
服务端模式:glances -s -B IPADDR
客户端模式:glances -c IPADDR
dstat – versatile tool for generating system resource statistics:用于生成系统资源统计信息的万能工具
dstat [-afv] [options..] [delay [count]]
常用选项:
-c:cpu相关信息;
-C #,#,…,total
-d:硬盘相关信息;
-D total,sda,sdb,…
-g:显示page相关统计数据
-m:显示内存相关统计数据
-n:显示network相关统计数据
-p:显示process相关统计数据
-r:显示IO相关统计数据
-s:显示swapped相关统计数据
–tcp:显示tcp协议
–udp:显示udp协议
–raw:显示raw
–socket:显示tcp、udp、socket等等
–ipc:显示进程间通讯
–top-cpu:显示最占用cpu的进程
–top-io:显示最占用io的进程
–top-mem:显示最占用内存的进程
–top-latency:显示延迟最大的进程
kill命令:向进程发送控制信号,以实现对进程管理;
显示当前系统可用控制信号:1、kill -l;2、 man 7 signal
常用控制信号:
1) SIGHUP:无需关闭进程而让其重读配置文件;
2) SIGINT:中止正在运行的进程;相当于Ctrl+c;
9) SIGKILL:杀死正在运行的进程;
15) SIGTERM:终止正在运行的进程;
18) SIGCONT:让停止态的进程运行;
19) SIGSTOP:让进程处于停止态;
kill [-s signal|-SIGNAL] pid…
终止“名称”之下的所有进程;
killall [-s signal|-SIGNAL] pid…
Linux系统作业控制:
job:
前台作业(foregroud):通过终端启动,且启动后会一直占据终端;
后台作业(background):可以通过终端启动,但启动后即转入后台运行(释放终端);
如何让作业运行于后台?
(1)运行中的作业
Ctrl+Z 注意:送往后台后,作业会转为停止态;
(2)尚未启动的作业
# COMMAND & 注意:此类作业虽然被送往后台,但其依然跟终端相关;如何希望送往后台的作业剥离与终端的关系: # nohup COMMAND &
查看所有的作业列表:jobs
可实现作业控制的常用命令:
# fg [%] 作业号:把指定的作业调回前台;
# bg [%] 作业号:让送往后台的作业在后台继续运行;
# kill % 作业号:终止对应的作业;
调整进程优先级:
可通过nice值调整的优先级范围:100-139;分别对应于:-20,19
进程启动时,其nice值默认为0,其优先级为120;
nice命令:以指定的nice值启动并运行命令;
nice [OPTION] [COMMAND [ARG]…]
选项:-n NICE
注意:仅管理员可调低nice值;
renice [-n] NICE pid…:调整正在运行进程的nice值
查看NICE值和优先级:
# ps axo pid,ni,priority,comm
未涉及的命令:sar,tsar,
网络客户端工具:
ping、lftp、ftp、lftpget、wget等
ping [option] destination
-c #:发送的ping包个数;
-w #:ping命令超时时长
-W #:一次ping操作中,等待对方响应的超时时长;
-s #:指名ping包报文大小;
hping命令:
–fast
–faster
–flood
-i ux
traceroute命令:跟踪从源主机到目标主机之间经过的网关;
ftp命令:ftp服务命令行客户端工具;
lftp [-p port] [-u user[,pass]] [site]
get,mget
put,mput
rm,mrm
wget [option]… [URL]…
-b:在后台执行下载操作;
-q:静默模式,不显示下载进度;
-O file:下载文件的保存位置;
-c:续传;
–limit-rate=amount:以指定的速率传输文件;
bash编程:
顺序执行:
选择执行:if,case
循环执行:for,while,until
for循环格式:
for VARAIBLE in LIST;do
循环体
done
while循环格式:
进入循环条件:CONDITION测试为“真”;
退出循环条件:CONDITION测试为“假”;
while CONITION;do
循环体
循环控制变量修正表达式
done
until循环格式:
进入循环条件:CONDITION测试为“假”;
退出循环条件:CONDITION测试为“真”;
until CONITION;do
循环体
循环控制变量修正表达式
done
例子:打印九九乘法表
#!/bin/bash
#
for j in {1..9};do
for i in $(seq 1 $j);do
echo -n -e “${i}x${j}=$[${i}*${j}]\t”
done
echo
done
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/91504