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

RayDon 2012-11-13

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

阅读之前,请务必花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 大学教程》 - 第二十六章(二) 学习笔记  进程和作业控制

《Unix & Linux 大学教程》 - 附录F 时区与24小时制时间

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

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相关的进程
显示哪些数据列
psPID TTY TIME CMD
ps -fUID PID PPID C TTY TIME CMD
ps -FUID PID PPID C SZ RSS STIME TTY TIME CMD
ps -lF S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
ps -lyS 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与进程相关的标志
NInice值,用于设置优先级
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相关的进程
显示哪些数据列
psPID TT STAT TIME COMMAND
ps jUSER PID PPID PGID SESS JOBC STAT TT TIME COMMAND
ps lUID PID PPID CPU PRI NI VSZ RSS WCHAN STAT TT TIME COMMAND
ps uUSER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
ps vPID STAT TIME SL RE PAGEIN VSZ RSS LIM TSIZ %CPU %MEM COMMAND
有用的特殊组合
ps显示自己的进程
ps ax显示所有进程
ps aux显示所有进程,完整输出
BSD标题含义
%CPUCPU使用百分比
%MEM真实内存使用百分比
CMD正被执行的命令的名称
COMMAND正被执行的命令的完整名称
CPU短期CPU使用(调度)
JOBC作业控制统计
LIM内存使用限额
NInice值,用于设置优先级
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

busyboxpstree

init-+-DxDrmServerIpc-+-2*[{BinderThread}]

|`-5*[{DxDrmServerIpc}]

|-adbd-+-sh---sh---busybox

|`-4*[{adbd}]

|-dbus-daemon

|-debuggerd

|-drmserver---3*[{BinderThread}]

|-hdmid-+-{BinderThread}

|`-{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相同的方式指定作业号

信号列表

编号名称缩写描述
1SIGHUPHUP中止:注销或者终端失去连接时发送给进程
2SIGINTINT中断:当按下^C键时发送
9SIGKILLKILL杀死:立即终止,进程不能捕获
15SIGTERMTERM终止:请求终止,进程不能捕获
18SIGCONTCONT继续:恢复挂起的进程,由fg或bg发送
19SIGSTOPSTOP停止(挂起):当^Z键时发送

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

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

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

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

kill -l

1HUPHangup17CHLDChildexited

2INTInterrupt18CONTContinue

3QUITQuit19STOPStopped(signal)

4ILLIllegalinstruction20TSTPStopped

5TRAPTrap21TTINStopped(ttyinput)

6ABRTAborted22TTOUStopper(ttyoutput)

7BUSBuserror23URGUrgentI/Ocondition

8FPEFloatingpointexception24XCPUCPUtimelimitexceeded

9KILLKilled25XFSZFilesizelimitexceeded

10USR1Usersignal126VTALRMVirtualtimerexpired

11SEGVSegmentationfault27PROFProfilingtimerexpired

12USR2Usersignal228WINCHWindowsizechanged

13PIPEBrokenpipe29IOI/Opossible

14ALRMAlarmclock30PWRPowerfailure

15TERMTerminated31SYSBadsystemcall

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其他所有进程的祖先,收养孤儿
apacheApacheWeb服务器
atd运行at程序排列的作业
crond管理预调度作业的执行(cron服务)
cupsd打印调度器(CUPS=CommonUnixPrintingSystem,通用Unix打印系统)
dhcpd为客户端动态配置TCP/IP信息(DHCP)
ftpdFTP服务器(FileTransferProtocol,文件传输协议)
gated网络的网关路由
httpdWeb服务器
inetdInternet服务
kerneld根据需要加载或卸载内核模块
kudzu在启动过程中检测并配置新/改变过的硬件
lpd打印队列(行打印机守护进程)
mysqlMYSQL数据库服务器
namedInternetDNS服务器(DNS=DomainNameSystem,域名系统)
nfsd网络文件访问(NFS=NetworkFileSystem,网络文件系统)
ntpd时间同步(NTP=NetworkTimeProtocol,网络时间协议)
rpcbind远程过程调度(RPC)
routed管理网络路由表
schedswapper的另一个名称
sendmailSMTP服务器(电子邮件)
smbdWindows客户端的文件共享&打印服务(Samba)
sshdSSH(安全shell)连接
swapper将数据从内存复制到交换空间,回收物理内存
syncd文件系统与内存内容的同步
syslogd收集各种系统消息(系统日志记录器)
xinetdInternet服务(取代inetd)

转贴请保留以下链接

本人blog地址

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

相关推荐