Files
kaka111222333-kaka111222333…/_posts/2014-02-13-linux-ps.md
2019-11-17 01:12:14 +08:00

546 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
layout: post
title: Linux进程管理
tags: Linux 进程管理
categories: Linux
---
* TOC
{:toc}
## `&`
**将命令放在后台运行**
command &
此时将会产生1个任务编号与一个PID命令执行完成后将会在前台出现提示
>后台执行的任务如果存在信息输出,最好将其写入到文件,否则将会在前台显示,影响操作
---
## `[ctrl]-z`
**将命令放在后台暂停**
此时将会产生1个任务编号及其命令
---
## `jobs`
**查看后台任务状态**
[root@www ~]# `jobs [-lrs]`
选项与参数:
`-l` :除了列出 job number 与命令串之外,同时列出 PID 的号码;
`-r` :仅列出正在背景 run 的工作;
`-s` :仅列出正在背景当中暂停 (stop) 的工作。
>`+` 代表最近被放到背景的工作号码, `-` 代表最近最后第二个被放置到背景中的工作号码,其余没有符号
---
## `fg`
**将后台任务放到前台**
[root@www ~]# `fg %jobnumber`
选项与参数:
`%jobnumber` jobnumber 为任务号码(数字),那个 % 是可有可无的!
---
## `bg`
**将后台暂停的任务变为运行中**
[root@www ~]# `bg %jobnumber`
---
## `kill`
**移除任务**
[root@www ~]# `kill -signal %jobnumber`
[root@www ~]# `kill -l`
选项与参数:
`-l` :这个是 L 的小写,列出目前 kill 能够使用的讯号 (signal) 有哪些
`signal` :代表给予后面接的那个工作什么样的指示罗!用 man 7 signal 可知:
> `-1` :重新读取一次参数的配置档 (类似 reload)
>
> `-2` :代表与由键盘输入 [ctrl]-c 同样的动作;
>
> `-9` :立刻强制删除一个工作;
>
> `-15`:以正常的程序方式终止一项工作。与 -9 是不一样的。
---
## `nohup`
**离线任务**
>`!特别说明` 前面的几个命令中所谓的"背景”,都是指终端机背景(不会被ctrl+c中断),并非系统背景,一旦退出终端,任务立即终止。`nohup`可以在退出终端后继续执行任务。
[root@www ~]# `nohup` [命令与参数] <==在终端机前台中工作
[root@www ~]# `nohup` [命令与参数] & <==在终端机后台中工作
---
## `pstree`
**显示进程树**
[root@www ~]# `pstree [-A|U] [-up]`
选项与参数:
`-A` :各程序树之间的连接以 ASCII 字节来连接;
`-U` :各程序树之间的连接以万国码的字节来连接。在某些终端介面下可能会有错误;
`-p` :并同时列出每个 process 的 PID
`-u` :并同时列出每个 process 的所属帐号名称。
---
## `ps`
**将某个时间点的程序运行情况撷取下来**
[root@www ~]# `ps aux` <==观察系统所有的程序数据
[root@www ~]# `ps -lA` <==也是能够观察所有系统的数据
[root@www ~]# `ps axjf` <==连同部分程序树状态
选项与参数:
`-A` :所有的 process 均显示出来,与 -e 具有同样的效用;
`-a` :不与 terminal 有关的所有 process
`-u` :有效使用者 (effective user) 相关的 process
`x` :通常与 a 这个参数一起使用,可列出较完整资讯。
输出格式规划:
`l` :较长、较详细的将该 PID 的的资讯列出;
`j` :工作的格式 (jobs format)
`-f` :做一个更为完整的输出。
---
### `ps -l`
**仅观察自己的 bash 相关程序**
`F`:代表这个程序旗标 (process flags),说明这个程序的总结权限,常见号码有:
>若为 `4` 表示此程序的权限为 root
>
>若为 `1` 则表示此子程序仅进行复制(fork)而没有实际运行(exec)。
`S`:代表这个程序的状态 (STAT),主要的状态有:
>`R` (Running):该程序正在运行中;
>
>`S` (Sleep):该程序目前正在睡眠状态(idle),但可以被唤醒(signal)。
>
>`D` :不可被唤醒的睡眠状态,通常这支程序可能在等待 I/O 的情况(ex>列印)
>
>`T` :停止状态(stop),可能是在工作控制(背景暂停)或除错 (traced) 状态;
>
>`Z` (Zombie):僵尸状态,程序已经终止但却无法被移除至内存外。
`UID/PID/PPID`:代表此程序被该 UID 所拥有/程序的 PID 号码/此程序的父程序 PID 号码
`C`:代表 CPU 使用率,单位为百分比
`PRI/NI`Priority/Nice 的缩写,代表此程序被 CPU 所运行的优先顺序,数值越小代表该程序越快被 CPU 运行
`ADDR/SZ/WCHAN`都与内存有关ADDR 是 kernel function指出该程序在内存的哪个部分如果是个 running 的程序,一般就会显示『 - 』 / SZ 代表此程序用掉多少内存 / WCHAN 表示目前程序是否运行中,同样的, 若为 - 表示正在运行中。
`TTY`:登陆者的终端机位置,若为远程登陆则使用动态终端介面 (pts/n)
`TIME`:使用掉的 CPU 时间,注意,是此程序实际花费 CPU 运行的时间,而不是系统时间;
`CMD`:就是 command 的缩写,造成此程序的触发程序之命令为何
---
### `ps aux`
**观察系统所有程序**
`USER`:该 process 属於那个使用者帐号的?
`PID` :该 process 的程序识别码。
`%CPU`:该 process 使用掉的 CPU 资源百分比;
`%MEM`:该 process 所占用的实体内存百分比;
`VSZ` :该 process 使用掉的虚拟内存量 (Kbytes)
`RSS` :该 process 占用的固定的内存量 (Kbytes)
`TTY` :该 process 是在那个终端机上面运行,若与终端机无关则显示 ?,另外, tty1-tty6 是本机上面的登陆者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
`STAT`:该程序目前的状态,状态显示与 ps -l 的 S 旗标相同 (R/S/T/Z)
`START`:该 process 被触发启动的时间;
`TIME` :该 process 实际使用 CPU 运行的时间。
`COMMAND`:该程序的实际命令为何?
>ps结果后接 `<defunct>` 表示为僵尸程序
---
## `top`
**动态观察程序的变化**
[root@www ~]# `top [-d 数字] | top [-bnp]`
选项与参数:
`-d` :后面可以接秒数,就是整个程序画面升级的秒数。默认是 5 秒;
`-b` :以批量的方式运行 top ,还有更多的参数可以使用,通常会搭配数据流重导向来将批量的结果输出成为文件。
`-n` :与 -b 搭配,意义是,需要进行几次 top 的输出结果。
`-p` :指定某些个 PID 来进行观察监测。
在 top 运行过程当中可以使用的按键命令:
`?` :显示在 top 当中可以输入的按键命令;
`P`:以 CPU 的使用资源排序显示;
`M` :以 Memory 的使用资源排序显示;
`N` :以 PID 来排序喔!
`T` :由该 Process 使用的 CPU 时间累积 (TIME+) 排序。
`k` :给予某个 PID 一个讯号 (signal)
`r` :给予某个 PID 重新制订一个 nice 值。
`q` :离开 top 软件的按键。
---
**`echo $$`** ( 查看bash的pid)
---
## `signal`
| 代号 | 名称 | 内容 |
|:----:|:----:|:----|
| 1 | SIGHUP | 启动被终止的程序,可让该 PID 重新读取配置,类似重新启动 |
| 2 | SIGINT | 相当於用键盘输入 [ctrl]-c 来中断一个程序 |
| 9 | SIGKILL | 强制中断一个程序,尚未完成的部分可能会有遗留物|
| 15 | SIGTERM | 正常结束程序,如果该程序已经发生问题,signal将失效 |
| 17 | SIGSTOP | 相当於用键盘输入 [ctrl]-z 来暂停一个程序 |
---
## `kill`
**杀死进程**
[root@www ~]# `kill PID`
`!特别说明`kill后面直接加数字表示杀死进程这与上面的移除任务用法是不同的
---
## `killall`
**按程序启动命令杀死进程**
[root@www ~]# ` killall [-iIe] [command name]`
选项与参数:
`-i` interactive 互动的意思,删除时,会出现提示
`-e` exact 准确的意思,后面接的 command name要与运行中程序的启动命令一致但整个完整的命令不能超过 15 个字节(若程序启动时使用了参数,则程序名与后面接的参数作为整体)
`-I` :命令名称(可能含参数)忽略大小写。
---
## `nice`
**指定nice值启动新程序**
[root@www ~]# `nice [-n 数字] command`
选项与参数:
`-n` :后面接一个数值,数值的范围 -20 ~ 19。
---
## `renice`
**重设指定程序的nice值**
[root@www ~]# `renice [number] PID`
选项与参数:
`PID` :某个程序的 ID
---
## `free`
**观察内存使用情况**
[root@www ~]# `free [-b|-k|-m|-g] [-t]`
选项与参数:
默认单位为 Kbytes可以使用 `-b`(bytes),`-m`(Mbytes),`-k`(Kbytes),`-g`(Gbytes) 来显示单位
`-t` :显示实体内存与 swap 的总量。
---
## `uname`
**查看系统核心信息**
[root@www ~]# `uname [-asrmpi]`
选项与参数:
`-a` :所有系统相关的资讯,包括底下的数据都会被列出来;
`-s` :系统核心名称
`-r` :核心的版本
`-m` :本系统的硬件名称,例如 i686 或 x86_64 等;
`-p` CPU 的类型,与 -m 类似,只是显示的是 CPU 的类型!
`-i` :硬件的平台 (ix86)
---
## `uptime`
**观察系统启动时间与工作负载**
---
## `netstat`
**追踪网络与Socket**
[root@www ~]# `netstat -[atunlp]`
选项与参数:
`-a` 将目前系统上所有的连线、监听、Socket 数据都列出来
`-t` :列出 tcp 网络封包的数据
`-u` :列出 udp 网络封包的数据
`-n` :不以程序的服务名称,以端口号 (port number) 来显示;
`-l` :列出目前正在网络监听 (listen) 的服务;
`-p` :列出该网络服务的程序 PID
网络参数
`Proto` :网络的封包协议,主要分为 TCP 与 UDP 封包,相关数据请参考服务器篇;
`Recv-Q`:非由使用者程序连结到此 socket 的复制的总 bytes 数;
`Send-Q`:非由远程主机传送过来的 acknowledged 总 bytes 数;
`Local Address` :本地端的 IP:port 情况
`Foreign Address`:远程主机的 IP:port 情况
`State` :连线状态,主要有创建(ESTABLISED)及监听(LISTEN)
本机程序
`Proto` :一般就是 unix 啦;
`RefCnt`:连接到此 socket 的程序数量;
`Flags` :连线的旗标;
`Type` socket 存取的类型。主要有确认连线的 STREAM 与不需确认的 DGRAM 两种;
`State` :若为 CONNECTED 表示多个程序之间已经连线创建。
`Path` :连接到此 socket 的相关程序的路径!或者是相关数据输出的路径。
---
## `dmesg`
**查看核心产生的信息**
---
## `vmstat`
**侦测系统资源变化**
[root@www ~]# `vmstat [-a] [间隔时间] [总次数]]` <==CPU/内存等资讯
[root@www ~]# ` vmstat [-fs]` <==内存相关
[root@www ~]# `vmstat [-S 单位]` <==配置显示数据的单位
[root@www ~]# `vmstat [-d]` <==与磁碟有关
[root@www ~]# `vmstat [-p 分割槽]` <==与磁碟有关
选项与参数:
`-a` :使用 inactive/active(活跃与否) 取代 buffer/cache 的内存输出资讯;
`-f` :启动到目前为止,系统复制 (fork) 的程序数;
`-s` :将一些事件 (启动至目前为止) 导致的内存变化情况列表说明;
`-S` :后面可以接单位,让显示的数据有单位。例如 K/M 取代 bytes 的容量;
`-d` :列出磁碟的读写总量统计表
`-p` :后面列出分割槽,可显示该分割槽的读写总量统计表
>内存栏位 (`procs`) 的项目分别为:
>>`r` :等待运行中的程序数量;`b`:不可被唤醒的程序数量。这两个项目越多,代表系统越忙碌 (因为系统太忙,所以很多程序就无法被运行或一直在等待而无法被唤醒之故)。
>内存栏位 (`memory`) 项目分别为:
>>`swpd`:虚拟内存被使用的容量; `free`:未被使用的内存容量; `buff`:用於缓冲内存; `cache`:用於高速缓存。 这部份则与 `free` 是相同的。
>内存置换空间 (`swap`) 的项目分别为:
>>`si`:由磁碟中将程序取出的量; `so`:由於内存不足而将没用到的程序写入到磁碟的 `swap` 的容量。 如果 si/so 的数值太大,表示内存内的数据常常得在磁碟与主内存之间传来传去,系统效能会很差!
>磁碟读写 (`io`) 的项目分别为:
>>`bi`:由磁碟写入的区块数量; `bo`:写入到磁碟去的区块数量。如果这部份的值越高,代表系统的 I/O 非常忙碌!
>系统 (`system`) 的项目分别为:
>>`in`:每秒被中断的程序次数; `cs`:每秒钟进行的事件切换次数;这两个数值越大,代表系统与周边设备的沟通非常频繁! 这些周边设备当然包括磁碟、网络卡、时间钟等。
>`CPU` 的项目分别为:
>>`us`:非核心层的 CPU 使用状态; `sy`:核心层所使用的 CPU 状态; `id`:闲置的状态; `wa`:等待 I/O 所耗费的 CPU 状态; `st`:被虚拟机器 (virtual machine) 所盗用的 CPU 使用状态 (2.6.11 以后才支持)。
---
## `fuser`
**查看使用指定的文件或文件系统的进程**
[root@www ~]# `fuser [-umv] [-k [i] [-signal]]` file/dir
选项与参数:
`-u` :除了程序的 PID 之外,同时列出该程序的拥有者;
`-m` :后面接的那个档名会主动的上提到该文件系统的最顶层,对 umount 不成功很有效!
`-v` :可以列出每个文件与程序还有命令的完整相关性!
`-k` :找出使用该文件/目录的 PID ,并试图以 SIGKILL 这个讯号给予该 PID
`-i` :必须与 -k 配合,在删除 PID 之前会先询问使用者意愿!
`-signal`:例如 -1 -15 等等,若不加的话,默认是 SIGKILL (-9) 罗!
>权限:
`c` :此程序在当前的目录下(非次目录)
`e` :可被触发为运行状态;
`f` :是一个被开启的文件;
`r` :代表顶层目录 (root directory)
`F` :该文件被开启了,不过在等待回应中;
`m` :可能为分享的动态函式库;
---
## `lsof`
**列出由程序开启的文件**
[root@www ~]# `lsof [-aUu] [+d]`
选项与参数:
`-a` :多项数据需要『同时成立』才显示出结果时!(内连接``
`-U` :仅列出 Unix like 系统的 socket 文件类型;
`-u` :后面接 username列出该使用者相关程序所开启的文件
`+d` :后面接目录,即找出某个目录底下已经被开启的文件!
---
## `pidof`
**找出某个正在的运行程序的pid**
[root@www ~]# `pidof [-sx] program_name...`
选项与参数:
`-s` :仅列出一个 PID 而不列出所有的 PID
`-x` :同时列出该 program name 可能的 PPID 那个程序的 PID