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

来源:互联网 发布:中国人在西班牙 知乎 编辑:程序博客网 时间:2024/04/29 12:40

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


阅读之前,请务必花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] [-ppid] [-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 CMDps -fUID PID PPID C TTY TIME CMDps -FUID PID PPID C SZ RSS STIME TTY TIME CMDps -lF S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMDps -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进程IDPPID父进程的进程IDPRI优先级(数字越大优先级越低)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 COMMANDps jUSER PID PPID PGID SESS JOBC STAT TT TIME COMMANDps lUID PID PPID CPU PRI NI VSZ RSS WCHAN STAT TT TIME COMMANDps uUSER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMANDps 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进程IDPPID父进程的进程IDPRI调度优先级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、FreeBSDD不可中断睡眠:等待事件结束(通常是I/O,D=“磁盘”)I空闲:超过20秒的睡眠(仅适用于FreeBSD)R正在运行或可运行(可运行=正在运行队列中等待)S可中断睡眠:等待事件结束T挂起:由作业控制信号挂起或者因为追踪而被挂起Z僵进程:终止后,父进程没有等待



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



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

监视系统进程:top、prstat

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

语法:

top [-d delay] [-ncount] [-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相同的方式指定作业号



信号列表

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

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







转贴请保留以下链接

本人blog地址

http://su1216.iteye.com/

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


原创粉丝点击