查看正在运行的进程:ps命令
ps 命令是最常用的监控进程的命令,通过此命令可以查看系统中所有运行进程的详细信息。
由于在不同的 Linux 发行版上,ps 命令的语法各不相同,Linux 采取了一个折中的方法,即融合各种不同的风格,兼顾那些已经习惯了其它系统上使用 ps 命令的用户。
ps 命令的基本格式如下:(也是最常用的两个,基本作用是一致的)
[root@localhost ~]# ps aux
#查看系统中所有的进程,使用 BS 操作系统格式,不用加-
[root@localhost ~]# ps -le
#查看系统中所有的进程,使用 Linux 标准命令格式
选项:
# a:显示所有与终端相关的进程
# u:显示进程的用户及内存等信息
# x:显示没有控制终端的进程
# aux:相当于全部显示出来
-l:长格式显示更加详细的信息;比如优先级、父进程的PPID等
-e:显示所有进程;
# 例如:光一个ps就是查看一下当前登录产生了哪些进程
[root@localhost ~]# ps
PID TTY TIME CMD
7808 pts/4 00:00:00 bash
7837 pts/4 00:00:00 ps
[root@localhost ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 7808 7804 0 80 0 - 29051 do_wai pts/4 00:00:00 bash
0 R 0 7839 7808 0 80 0 - 38336 - pts/4 00:00:00 ps
可以看到,这次从 pts/4 虚拟终端登录,只产生了两个进程:一个是登录之后生成的 Shell,也就是 bash;另一个是正在执行的 ps 命令。
# 例如
[root@localhost ~]# ps a
PID TTY STAT TIME COMMAND
6088 tty1 Ss 0:00 /sbin/agetty --noclear tty1 linux
7227 pts/0 Ss 0:00 -bash
10520 pts/0 R 0:00 ps a
[root@localhost ~]# ps u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 6088 0.0 0.0 110196 852 tty1 Ss 08:24 0:00 /sbin/agetty --noclear tty1 linux
root 7227 0.0 0.2 116336 2964 pts/0 Ss 08:35 0:00 -bash
root 10521 0.0 0.1 155468 1864 pts/0 R 10:54 0:00 ps u
[root@localhost ~]# ps aux 相当于全部显示出来
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2 0.0 0.0 0 0 ? S 08:24 0:00 [kthreadd]
root 6088 0.0 0.0 110196 852 tty1 Ss 08:24 0:00 /sbin/agetty --noclear tty1 linux
......
......
# ps命令输出信息含义
USER 该进程是由哪个用户产生的
PID 进程的ID
%CPU 该进程占用CPU百分比,越高说明越耗资源
%MEM 该进程占用物理内存百分比,越高说明越耗资源
VSZ 该进程占用虚拟内存大小(单位KB) swap
RSS 该进程占用物理内存大小(单位KB)
# TTY 该进程运行的终端
?: 内核运行的终端
tty1-7: 本地机器运行的终端
# pts/0-255: 远程连接的终端,第一个是0,第二个是1,依次增长
# STAT 进程的状态
START 该进程的启动时间
TIME 该进程占用CPU的运算时间
COMMAND 产生此进程的命令名
[]: 内核态的进程(系统内核的
没[]: 用户态的进程(用户的
STAT:进程的状态
D #无法中断的休眠状态(通常处于I/O状态)Ctrl C没用
R #正在运行的状态 running
S #处于休眠的状态,可被唤醒 sleep
T #暂停或被追踪的状态 可能是在后台暂停或进程处于除错状态
W 进入内存交换(从内核2.6开始无效)
X 死掉的进程(少见)
Z #僵尸进程
< 优先级高的进程
N 优先级较低的进程
L 被锁进内存
s 父进程(在它之下有子进程开启着)
l 以线程的方式运行
| 多进程
进程位于前台
例子:
两台机器同时操作服务器,用一台看另一台的进程
放后台后变T
#注
jobs 查看后台的东西
bg 数字 重新调用后台的东西
fg 把后台ping放前台
拓展 :
ps 命令排序
ps命令使用排列
o指定查看的列名 看谁放谁
f查看子进程
ps axo ()自由排序 看啥放啥
按user,pid,ppid,%mem,command排序
[root@localhost ~]# ps axo user,pid,ppid,%mem,command |grep sshd
root 6957 1 0.4 /usr/sbin/sshd -D
root 7223 6957 0.5 sshd: root@pts/0
root 10571 7227 0.0 grep --color=auto sshd
pgrep命令
pgrep
pgrep是一个根据名称查找进程ID的命令,返回的是进程ID,若存在多个进程,则分为不同的行返回ID(默认实现)。
[root@localhost ~]# pgrep sshd
6957
12393
13042
pstree命令
[root@localhost ~]# yum install psmisc
# 格式
[root@localhost ~]# pstree [选项] [PID或用户名]
选项
-a显示启动每个进程对应的完整指令,包括启动进程的路径、参数等。
-c不使用精简法显示进程信息,即显示的进程中包含子进程和父进程。
-n根据进程 PID 号来排序输出,默认是以程序名排序输出的。
-p显示进程的 PID。
-u显示进程对应的用户名称。
# 在使用 pstree 命令时,如果不指定进程的 PID 号,也不指定用户名称,则会以 init 进程为根进程,显示系统中所有程序和进程的信息;反之,若指定 PID 号或用户名,则将以 PID 或指定命令为根进程,显示 PID 或用户对应的所有程序和进程。
# systemd进程是系统启动的第一个进程,进程的 PID 是 1,也是系统中所有进程的父进程。
[root@localhost ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}] 有2个NetworkManager存在
├─VGAuthService
├─agetty
├─auditd───{auditd}
├─crond
├─dbus-daemon───{dbus-daemon}
├─firewalld───{firewalld}
├─master─┬─pickup
│ └─qmgr
├─polkitd───6*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd─┬─sshd───bash─┬─top
│ │ └─vim
│ └─sshd───bash───pstree
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─vmtoolsd───{vmtoolsd}
ps:
目前市面上各种发行版linux操作系统,1号进程基本已经替换成systemd进程,在较早版本的linux,1号进程是init进程。