《Unix & Linux 大学教程》 - 第二十六章(二) 学习笔记

学习笔记,内容基础,适合初学者。


阅读之前,请务必花30秒查看前言说明(在第一、二章前面部分)

《Unix & Linux 大学教程》 - 第一、二章 学习笔记   Unix简介 & 什么是Linux?什么是Unix
《Unix & Linux 大学教程》 - 第三、四章 学习笔记   Unix连接 & 开始使用Unix
《Unix & Linux 大学教程》 - 第五、六章 学习笔记   GUI:图形用户界面 & Unix工作环境
《Unix & Linux 大学教程》 - 第七、八章 学习笔记   Unix键盘使用 & 能够立即使用的程序
《Unix & Linux 大学教程》 - 第九、十章 学习笔记   文档资料:Unix手册与Info & 命令语法
《Unix & Linux 大学教程》 - 第十一、十二章 学习笔记   shell & 使用shell:变量和选项
《Unix & Linux 大学教程》 - 第十三章 学习笔记   使用shell:命令和定制
《Unix & Linux 大学教程》 - 第十四、十五章 学习笔记   使用shell:初始化文件
《Unix & Linux 大学教程》 - 第十六、十七章 学习笔记   过滤器:简介和基本操作
《Unix & Linux 大学教程》 - 第十八章 学习笔记   过滤器:统计和格式化
《Unix & Linux 大学教程》 - 第十九章(一) 学习笔记   过滤器:选取、排序、组合及变换
《Unix & Linux 大学教程》 - 第十九章(二)、第二十章 学习笔记 过滤器:选取、排序、组合及变换 正则表达式
《Unix & Linux 大学教程》 - 第二十一章 学习笔记 显示文件
《Unix & Linux 大学教程》 - 第二十二章(一) 学习笔记 vi文本编辑器(一)
《Unix & Linux 大学教程》 - 第二十二章(二) 学习笔记 vi文本编辑器(二)
《Unix & Linux 大学教程》 - 第二十二章(三) 学习笔记 vi文本编辑器(三)
《Unix & Linux 大学教程》 - 第二十三章 学习笔记 Unix文件系统
《Unix & Linux 大学教程》 - 第二十四章 学习笔记 目录操作
《Unix & Linux 大学教程》 - 第二十五章 学习笔记 文件操作
《Unix & Linux 大学教程》 - 第二十六章(一) 学习笔记 进程和作业控制
《Unix & Linux 大学教程》 - 第二十六章(二) 学习笔记 进程和作业控制





第二十六章(二):进程和作业控制

ps

选项分为三组:UNIX选项、BSD选项和仅适用与GNU的选项

UNIX选项通常以连字符(-)开头,BSD选项前没有连字符

如果是混合系统,必须适用BSD选项才能进行BSD输出


语法:

UNIX选项基本语法

ps [-aefFly] [-p pid] [-u userid]

BSD选项基本语法

ps [ajluvx] [-p pid] [-u userid]



UNIX选项信息

显示哪些进程?
ps 与您的用户标识和终端相关的进程
ps -a 与任何用户标识和终端的相关进程
ps -e 所有进程(包括守护进程)
ps -p pid 与指定进程ID pid相关的进程
ps -u userid 与指定用户标识userid相关的进程
显示哪些数据列
ps PID TTY TIME CMD
ps -f UID PID PPID C TTY TIME CMD
ps -F UID PID PPID C SZ RSS STIME TTY TIME CMD
ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
ps -ly S UID PID PPID C PRI NI RSS SZ WCHAN TTY TIME CMD
有用的特殊组合
ps 显示自己的进程
ps -ef 显示所有用户进程,完整输出
ps -a 显示所有非守护进程的进程
ps -t - 仅显示所有守护进程



UNIX列标题含义


UNIX标题 含义
ADDR 进程表中的虚拟地址
C 处理器利用率(废弃率)
CMD 正被执行的命令的名称
F 与进程相关的标志
NI nice值,用于设置优先级
PID 进程ID
PPID 父进程的进程ID
PRI 优先级(数字越大优先级越低)
RSS 内存驻留空间大小(内存管理)
S 状态代码(D、R、S、T、Z)
STIME 累积系统时间
SZ 物理页的大小(内存管理)
TIME 累积CPU时间
TTY 控制终端的完整名称
UID 用户标识
WCHAN 等待通道



*******************************************************

BSD选项信息

显示哪些进程?
ps 与您的用户标识和终端相关的进程
ps a 与任何用户标识和终端的相关进程
ps e 所有进程(包括守护进程)
ps p pid 与指定进程ID pid相关的进程
ps U userid 与指定用户标识userid相关的进程
显示哪些数据列
ps PID TT STAT TIME COMMAND
ps j USER PID PPID PGID SESS JOBC STAT TT TIME COMMAND
ps l UID PID PPID CPU PRI NI VSZ RSS WCHAN STAT TT TIME COMMAND
ps u USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
ps v PID STAT TIME SL RE PAGEIN VSZ RSS LIM TSIZ %CPU %MEM COMMAND
有用的特殊组合
ps 显示自己的进程
ps ax 显示所有进程
ps aux 显示所有进程,完整输出




BSD标题 含义
%CPU CPU使用百分比
%MEM 真实内存使用百分比
CMD 正被执行的命令的名称
COMMAND 正被执行的命令的完整名称
CPU 短期CPU使用(调度)
JOBC 作业控制统计
LIM 内存使用限额
NI nice值,用于设置优先级
PAGEIN 总的缺页错误(内存管理)
PGID 进程组号
PID 进程ID
PPID 父进程的进程ID
PRI 调度优先级
RE 内存驻留时间(单位为秒)
RSS 内存驻留空间大小(内存管理)
SESS 会话指针
SL 睡眠时间(单位为秒)
STARTED 定时启动
STAT 状态代码(O、R、S、T、Z)
TIME 累积CPU时间
TSIZ 文本大小(单位为KB)
TT 控制终端的缩写名称
TTY 控制终端的完整名称
UID 用户标识
USER 用户名
VSZ 虚拟内存(单位KB)
WCHAN 等待通道

(p719,把VSZ解释为虚拟大小,应该是笔误吧)




状态代码含义

Linux、FreeBSD
D 不可中断睡眠:等待事件结束(通常是I/O,D=“磁盘”)
I 空闲:超过20秒的睡眠(仅适用于FreeBSD)
R 正在运行或可运行(可运行=正在运行队列中等待)
S 可中断睡眠:等待事件结束
T 挂起:由作业控制信号挂起或者因为追踪而被挂起
Z 僵进程:终止后,父进程没有等待



Solaris
O 正在运行:当前正在执行(O=“onproc”)
R 可运行:正在运行队列中等待
S 正在睡眠:等待事件结束(通常是I/O)
T 挂起:由作业控制信号挂起或者因为追踪而被挂起
Z 僵进程:终止后,父进程没有等待



----------------------------------------------------------------------------------------------------------------------------------

监视系统进程:top、prstat

top(大多数Linux和BSD系统可以使用)

语法:

top [-d delay] [-n count] [-p pid[,pid]...]

delay是刷新时间间隔(单位为秒)

count是刷新的总时间量

pid是进程ID

注意:系统之间,选项可能有所不同,建议先查看man手册

比如我的手机上面是这个样子的:


$ top -h

Usage: top [ -m max_procs ] [ -n iterations ] [ -d delay ] [ -s sort_column ] [ -t ] [ -h ]

    -m num  Maximum number of processes to display.

    -n num  Updates to show before exiting.

    -d num  Seconds to wait between updates.

    -s col  Column to sort by (cpu,vss,rss,thr).

    -t      Show threads instead of processes.

    -h      Display this help screen.




h:帮助

q或^C:退出

<Space>:强制top立即刷新显示(该命令通常不被记录)

(我这里就没有记录 - Help for Interactive Commands - procps version 3.2.8)

(我的手机上不支持这个命令,当然,也不支持h,q。HTC android4.0)





显示进程树:pstree(有的系统使用ptree作为替代Solaris上用prstat

语法:

pstree [-aAcGnpu] [pid | userid]

-c(do not compact):不要压缩

-A:强制使用ASCII字符

-G:使用行绘制字符

-p:显示每个进程的PID

-n:按PID对进程排序(默认是按进程名排序)

-a(all,全部):显示全部信息

-u(userid change,用户标识改变):选项标识当子进程以不同于父进程的用户标识运行时所发生的改变


下面是在我手机上面执行pstree后的输出,截取了一段

shell@android:/ # busybox pstree
busybox pstree
init-+-DxDrmServerIpc-+-2*[{Binder Thread }]
     |                `-5*[{DxDrmServerIpc}]
     |-adbd-+-sh---sh---busybox
     |      `-4*[{adbd}]
     |-dbus-daemon
     |-debuggerd
     |-drmserver---3*[{Binder Thread }]
     |-hdmid-+-{Binder Thread }
     |       `-{HDMIDaemon}
     |-htc_ebdlogd---logcat2


其中2*表示两个完全相同的进程




fuser

作用:将文件与进程联系起来

下面是一个书中的例子,会打印出PID和作业号

find / -name foo -print > bar 2>/dev/null &

[3] 3456

fuser bar

bar: 3456


fuser显示出哪个进程正在使用bar文件

注意:如果不是系统用户,fuser可能不会位于你的搜索目录,可以使用whereis来找到fuser的位置




kill

语法:

kill [-signal] pid... | jobid...

pid或jobid用来标识进程

如果不指定signal,默认发送TERM

注意:kill可以与fg和bg相同的方式指定作业号



信号列表

编号 名称 缩写 描述
1 SIGHUP HUP 中止:注销或者终端失去连接时发送给进程
2 SIGINT INT 中断:当按下^C键时发送
9 SIGKILL KILL 杀死:立即终止,进程不能捕获
15 SIGTERM TERM 终止:请求终止,进程不能捕获
18 SIGCONT CONT 继续:恢复挂起的进程,由fg或bg发送
19 SIGSTOP STOP 停止(挂起):当^Z键时发送

当使用kill向进程发送信号时,可以使用信号的编号、名称或者缩写

注意:各个系统之间信号的编号可能有所不同,所以最好使用名称或缩写,这些是标准化的


kill -l:查看系统支持的全部信号列表

下面是我手机上面支持的信号

kill -l
 1    HUP Hangup                               17   CHLD Child exited
 2    INT Interrupt                              18   CONT Continue
 3   QUIT Quit                                    19   STOP Stopped (signal)
 4    ILL Illegal instruction                  20   TSTP Stopped
 5   TRAP Trap                                    21   TTIN Stopped (tty input)
 6   ABRT Aborted                              22   TTOU Stopper (tty output)
 7    BUS Bus error                             23    URG Urgent I/O condition
 8    FPE Floating point exception      24   XCPU CPU time limit exceeded
 9   KILL Killed                                   25   XFSZ File size limit exceeded
10   USR1 User signal 1                     26 VTALRM Virtual timer expired
11   SEGV Segmentation fault           27   PROF Profiling timer expired
12   USR2 User signal 2                     28  WINCH Window size changed
13   PIPE Broken pipe                       29     IO I/O possible
14   ALRM Alarm clock                        30    PWR Power failure
15   TERM Terminated                       31    SYS Bad system call
16 STKFLT Stack fault

如果不支持此选项,可以搜索signal.h这个文件

通常,HUP、INT、KILL和TERM的信号编号在所有系统上面都是相同的




当一个前台程序失去响应,按^C也无法停止,那么可以:

1尝试^Z挂起程序,如果成功,使用ps或者jobs找到进程,然后kill

2打开新终端,ps -u或者ps U列举你的用户标识运行的进程,然后kill

3如果使用的是远程Unix,可以尝试断开与主机的连接。(在一些系统上,断开与主机的连接时,内核会自动杀死你所有的进程)





设置进程优先级

nice

语法:

nice [-n adjustment] command

adjustment是一个数值

command是希望运行的命令

大多数系统上,adjustment的范围是0-19,超级用户可以设置的范围为-20-19,数字越大,优先级越低

adjustment默认=10

当以普通方式运行程序时(不使用nice),nice值为0

注意:nice只能应用于自己独立存在的程序

可以对外部命令和shell脚本应用nice,但是shell内部命令、管道线或复合命令不能降低优先级



改变现有进程优先级

renice

语法:

renice niceness -p processid

niceness是nice值

processid是进程ID

常规用户只能修改自己进程的nice值

常规用户使用renice只能降低进程优先级





守护进程

守护进程是一种在后台运行,不与任何终端相连,提供服务的进程。

Unix通常有许多守护进程

可以使用下面命令查看守护进程

ps -t - | less

如果系统不支持,可以考虑

ps -e | grep '?' | less

使用ps命令时,TTY列显示问号的(?)表示该进程不受终端控制



大多数守护进程是在启动的最后一部分自动创建的

在一些情形中,这些进程由初始化进程创建

另一些情形中,这些进程由终止自身的父进程创建,然后init会收养这些孤儿,从而他们的父进程变为init


Linux系统中,/etc/rc.d/init.d目录下有大量shell脚本,每个shell脚本都是用来启动、停止或者重新启动一个特定的守护进程





一些Unix守护进程

守护进程 目的
init 其他所有进程的祖先,收养孤儿
apache Apache Web服务器
atd 运行at程序排列的作业
crond 管理预调度作业的执行(cron服务)
cupsd 打印调度器(CUPS=Common Unix Printing System,通用Unix打印系统)
dhcpd 为客户端动态配置TCP/IP信息(DHCP)
ftpd FTP服务器(File Transfer Protocol,文件传输协议)
gated 网络的网关路由
httpd Web服务器
inetd Internet服务
kerneld 根据需要加载或卸载内核模块
kudzu 在启动过程中检测并配置新/改变过的硬件
lpd 打印队列(行打印机守护进程)
mysql MYSQL数据库服务器
named Internet DNS服务器(DNS=Domain Name System,域名系统)
nfsd 网络文件访问(NFS=Network File System,网络文件系统)
ntpd 时间同步(NTP=Network Time Protocol,网络时间协议)
rpcbind 远程过程调度(RPC)
routed 管理网络路由表
sched swapper的另一个名称
sendmail SMTP服务器(电子邮件)
smbd Windows客户端的文件共享&打印服务(Samba)
sshd SSH(安全shell)连接
swapper 将数据从内存复制到交换空间,回收物理内存
syncd 文件系统与内存内容的同步
syslogd 收集各种系统消息(系统日志记录器)
xinetd Internet服务(取代inetd)







转贴请保留以下链接

本人blog地址

http://su1216.iteye.com/

http://blog.csdn.net/su1216/


你可能感兴趣的:(《Unix & Linux 大学教程》 - 第二十六章(二) 学习笔记)