Linux中如何使用ps命令

54次阅读
没有评论

共计 6346 个字符,预计需要花费 16 分钟才能阅读完成。

这篇文章主要介绍 Linux 中如何使用 ps 命令,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

(cpu)使用量,观察进程信息:

  ps auxw|sort -k3 -rn|head -20

linux 上进程有 5 种状态: 

运行(正在运行或在运行队列中等待) 

中断(休眠中,  受阻,  在等待某个条件的形成或接受到信号) 

不可中断(收到信号不唤醒和不可运行,  进程必须等待直到有中断发生) 

僵死 (进程已终止,  但进程描述符存在,  直到父进程调用 wait4() 系统调用后释放) 

停止(进程收到 SIGSTOP, SIGSTP, SIGTIN, SIGTOU 信号后停止运行) 

ps 工具标识进程的 5 种状态码:

D  不可中断  uninterruptible sleep (usually IO) 

R  运行  runnable (on run queue) 

S  中断  sleeping 

T  停止  traced or stopped 

Z  僵死  a defunct (”zombie”) process 

名称:ps 
使用权限:所有使用者  
使用方式:ps [options] [–help] 
说明:显示瞬间行程 (process) 的动态  
参数: 

ps  的参数非常多,  在此仅列出几个常用的参数并大略介绍含义  

-A  列出所有的行程  

-w  显示加宽可以显示较多的资讯  

-au  显示较详细的资讯  

-aux  显示所有包含其他使用者的行程  

au(x)  输出格式  : 

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 

USER:  进程拥有者  

PID: pid 

%CPU:  占用的  CPU  使用率  

%MEM:  占用的记忆体使用率  

VSZ:  占用的虚拟记忆体大小  

RSS:  占用的记忆体大小  

TTY:  终端的次要装置号码  (minor device number of tty) 

STAT:  该行程的状态: 

D:  不可中断的静止  

R:  正在执行中  

S:  静止状态  

T:  暂停执行  

Z:  不存在但暂时无法消除  

W:  没有足够的记忆体分页可分配  

:  高优先序的行程  

N:  低优先序的行程  

L:  有记忆体分页分配并锁在记忆体内  (即时系统或捱 A  I/O) 

START:  行程开始时间  

TIME:  执行的时间  

COMMAND: 所执行的指令  

范例: 

ps 

PID TTY TIME CMD 

2791 ttyp0 00:00:00 tcsh 

3092 ttyp0 00:00:00 ps 

% ps -A 

PID TTY TIME CMD 

1 ? 00:00:03 init 

2 ? 00:00:00 kflushd 

3 ? 00:00:00 kpiod 

4 ? 00:00:00 kswapd 

5 ? 00:00:00 mdrecoveryd 

……. 

% ps -aux 

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 

root 1 0.0 0.7 1096 472 ? S Sep10 0:03 init [3] 

root 2 0.0 0.0 0 0 ? SW Sep10 0:00 [kflushd] 

root 3 0.0 0.0 0 0 ? SW Sep10 0:00 [kpiod] 

root 4 0.0 0.0 0 0 ? SW Sep10 0:00 [kswapd] 

具体命令解释如下:

ps a  显示现行终端机下的所有程序,包括其他用户的程序。 

ps -A  显示所有程序。 

ps c  列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。 

ps -e  此参数的效果和指定 A 参数相同。  例如: ps -e|grep sshd 

ps e  列出程序时,显示每个程序所使用的环境变量。 

ps f  用 ASCII 字符显示树状结构,表达程序间的相互关系。 

ps -H  显示树状结构,表示程序间的相互关系。 

ps -N  显示所有的程序,除了执行 ps 指令终端机下的程序之外。 

ps s  采用程序信号的格式显示程序状况。 

ps S  列出程序时,包括已中断的子程序资料。 

ps -t 终端机编号  

指定终端机编号,并列出属于该终端机的程序的状况。 

ps u 

以用户为主的格式来显示程序状况。 

ps x 

显示所有程序,不以终端机来区分。 

最常用的方法是 ps -aux, 然后再利用一个管道符号导向到 grep 去查找特定的进程, 然后再对特定的进程进行操作。 

附:Linux 中 top 与 ps 区别

一:ps 命令
以下是 ps 的最简单形式: 

$ ps 

PID TTY TIME CMD 

3884 pts/1 00:00:00 bash 

3955 pts/2 00:00:00 more 

3956 pts/5 00:00:05 sqlplus 

? PID  是进程的标识号。 

? TTY  是进程所属的终端控制台。 

? TIME  列是进程所使用的总的  CPU  时间。 

? CMD  列列出正在执行的命令行。 

使用带有  -ef  选项的  ps,返回系统中所有用户的所有进程的完整列表。一般将此  ps  命令的结果传送到  grep  中,则该结果更易于查看。例如: 

 

$ ps -ef | grep Oracle 

 

UID PID PPID C STIME TTY TIME CMD 

oracle 1633 1 0 13:58 ?00:00:00 ora_pmon_ora1 

oracle 1635 1 0 13:58 ?00:00:00 ora_dbw0_ora1 

oracle 1637 1 0 13:58 ?00:00:01 ora_lgwr_ora1 

oracle 1639 1 0 13:58 ?00:00:02 ora_ckpt_ora1 

oracle 1641 1 0 13:58 ?00:00:02 ora_smon_ora1 

oracle 1643 1 0 13:58 ?00:00:00 ora_reco_ora1 

oracle 1645 1 0 13:58 ?00:00:00 ora_cjq0_ora1 

oracle 1647 1 0 13:58 ?00:01:18 ora_qmn0_ora1 

oracle 1649 1 0 13:58 ?00:00:00 ora_s000_ora1 

oracle 1651 1 0 13:58 ?00:00:00 ora_d000_ora1 

 

-e :  在命令执行后显示环境  

-f :  完整显示输出  

?  标为  C  的列是由  CPU  用于计算执行优先级的因子。 

? STIME  是指进程的启动时间。 

?  问号表示这些进程不属于任何  TTY,因为它们是由系统启动的。 

主要参数说明:

1) 进程用户 ID(UID),
虽然 uid 通常是指数字型的标识,但在第一列下指定的是用户名,标记为 UID
2) 进程 ID(PID)
3) 父进程 ID(PPID)
  PPID 是父进程的标识号。对于 Oracle 进程,这里的标识号为 1 — 它是 init 进程(所有进程的父进程)的 id,因为在本系统中安   装的 Oracle 是作为登录进程的一部分而启动的
4) CPU 调度情况(C)
  即是是由 CPU 用于计算执行优先级的因子。
5) 进程启动的时间(STIME) 
6) 进程共占用 CPU 的时间(TIME) 
7) 启动进程的命令(CMD) 
8)问号表示这些进程不属于任何 TTY,因为它们是由系统启动的。 

使用 PS 命令分析系统性能的方法主要有: 
1. 首先,根据用户 ID 寻找由同一用户执行的许多相似任务,这些任务很可能是因为用户运行的某个脚本程序在后台启动多个进程而造成的。 
2.  接下来,检查 TIME 域中各进程累计占用 CPU 的时间,如果有某个进程累计占用了大量的 CPU 时间,通常说明该进程可能陷入了无限循环,或该京城的某写逻辑出了错  
3.  找到那些已陷入死锁的进程 ID 后,就可以使用 kill 命令强制终止该进程了。 

二:top 命令  
Ps 只为您提供当前进程的快照。要即时查看最活跃的进程,可使用 top。 
Top 实时地提供进程信息。它还拥有交互式的状态,允许用户输入命令,如 n 后面跟有 5 或 10 等数字。其结果是指示 top 显示 5 或 10 个最活跃的进程。 Top 持续运行,直到您按 q 退出 top 为止。 

Top 中的几个隐含参数:top -help
top 中按 1 键和 F 键的参数: 
按 1 键可以等到多个 cpu 的情况  
按 F(f: 当前状态,可以按相应的字母键做 top 的定制输出)后得参数: 
对 F 键和 f 键的区别: 
如果进入 F 键区可以做进程显示的排序,如果进入 f 键区的话则可以选择显示的多个项目: 

* A: PID = Process Id // 进程 ID 

 b: PPID = Parent Process Pid // 父进程 ID 

 c: RUSER = Real user name // 真正的 (Real) 所属用户名称  

 d: UID = User Id // 用户 ID 

 e: USER = User Name // 用户名称  

 f: GROUP = Group Name // 组名称  

 g: TTY = Controlling Tty // 控制  

 h: PR = Priority // 优先权  

 i: NI = Nice value // 优先级得值(负数代表较高的优先级, 正数是较低的优先级.0 标志改优先级的值是不会被调整的) 

 j: #C = Last used cpu (SMP) // 随后使用的 cpu 比率  

 k: %CPU = CPU usage //cpu 使用比率  

 l: TIME = CPU Time //cpu 占用时间  

 m: TIME+ = CPU Time, hundredths //cpu% 比  

 n: %MEM = Memory usage (RES) // 内存使用率  

 o: VIRT = Virtual Image (kb) // 虚拟镜像(VIRT = SWAP + RES: 所有进程使用的虚拟内存值, 包括所有的代码, 数据, 共享库已经被 swapped out 的) 

 p: SWAP = Swapped size (kb) // 交换空间大小(所有虚拟内存中的镜像) 

 q: RES = Resident size (kb) // 已经使用了的常驻内存(Resident size):RES = CODE + DATA 

 r: CODE = Code size (kb) // 分配给执行代码的物理内存  

 s: DATA = Data+Stack size (kb) //data+stack: 物理内存中非存放代码的空间, 用于存放数据  

 t: SHR = Shared Mem size (kb) // 共享内存大小. 放映了一个 task 的潜在可以供别人使用的内存的大小  

 u: nFLT = Page Fault count // 内存页错误的数量  

 v: nDRT = Dirty Pages count // 脏页的数量  

 w: S = Process Status // 进程状态:( R )为运行或可执行的,( S )为该程序正在睡眠中,( T )正在侦测或者是停止了,( Z )僵尸程序  

 x: COMMAND = Command name/line // 进程启动命令行参数  

 y: WCHAN = Sleeping in Function // 在睡眠中  

 z: Flags = Task Flags  sched.h  // 任务标志  

Note1: 

If a selected sort field can t be shown due to screen width or your field order, the   and   keys 

will be unavailable until a field within viewable range is chosen. 

 

Note2: 

Field sorting uses internal values, not those in column display. Thus, the TTY   WCHAN fields will violate strict ASCII collating sequence. (shame on you if WCHAN is chosen) 

 

Current Fields: AEHIOQTWKNMbcdfgjplrsuvyzX for window 1:Def 

Toggle fields via field letter, type any other key to return 

* A: PID = Process Id 

* E: USER = User Name 

* H: PR = Priority 

* I: NI = Nice value 

* O: VIRT = Virtual Image (kb) 

* Q: RES = Resident size (kb) 

* T: SHR = Shared Mem size (kb) 

* W: S = Process Status 

* K: %CPU = CPU usage 

* N: %MEM = Memory usage (RES) 

* M: TIME+ = CPU Time, hundredths 

 b: PPID = Parent Process Pid 

 c: RUSER = Real user name 

 d: UID = User Id 

 f: GROUP = Group Name 

 g: TTY = Controlling Tty 

 j: #C = Last used cpu (SMP) 

 p: SWAP = Swapped size (kb) 

 l: TIME = CPU Time 

 r: CODE = Code size (kb) 

 s: DATA = Data+Stack size (kb) 

 u: nFLT = Page Fault count 

 v: nDRT = Dirty Pages count 

 y: WCHAN = Sleeping in Function 

 z: Flags = Task Flags  sched.h  

* X: COMMAND = Command name/line 

 

Flags field: 

 0x00000001 PF_ALIGNWARN 

 0x00000002 PF_STARTING 

 0x00000004 PF_EXITING 

 0x00000040 PF_FORKNOEXEC 

 0x00000100 PF_SUPERPRIV 

 0x00000200 PF_DUMPCORE 

 0x00000400 PF_SIGNALED 

 0x00000800 PF_MEMALLOC 

 0x00002000 PF_FREE_PAGES (2.5) 

 0x00008000 debug flag (2.5) 

 0x00024000 special threads (2.5) 

 0x001D0000 special states (2.5) 

 0x00100000 PF_USEDFPU (thru 2.4) 

以上是“Linux 中如何使用 ps 命令”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-20发表,共计6346字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)