这节学习查看进程的一些命令。一个程序服务的开启必定至少有一个守护进程在运行,我们学习了查看进程,可以看到当前正在运行哪些程序进程,及程序进程的一些状况信息。
比如说,我们在服务器上安装了Apache服务器,Apache服务器开启后,会有一个名字为httpd的守护进程。假如服务器突然不能访问了,我们首先看下httpd进程是否还存在。不存在,肯定就不能提供web请求服务了。
先说下第一个命令:
1)who
该命令用于查看当前所有登录系统的用户信息
who [选项]
①可以看到当前登录的用户有ubuntu、nanshen。
我分别用ubuntu、nanshen账号登录了服务器。
②-H参数:显示各栏位的标题信息列
显示内容:
login name:登录用户名;
terminal line:使用终端设备;
login time:登录到系统的时间。
login ip:登录ip
pts是所谓的伪终端或虚拟终端,具体表现就是你打开一个终端,这个终端就叫pts/0,如果你再打开一个终端,这个新的终端就叫pts /1。
③多了两项:IDLE、PID
IDLE:显示闲置时间,若该用户在前一分钟之内有进行任何动作,将标示成"."号,如果该用户已超过24小时没有任何动作,则标示出"old"字符串。“00:33”33是分钟。
PID(Process ID):是进程ID号。每个用户登录后肯定会在服务器启动一个相应的进程
④-m参数只显示当前用户。
显示用户登录来源:
附:
w命令也可以查看登录当前系统的用户信息。与who命令相比,w命令的功能更强大,它不但可以显示当前有哪些用户登录到系统,还可以显示这些用户正在进行的操作,并给出更加详细和科学的统计数据。
w [-fhlsuV][用户名称]
w命令我不做介绍了,大家自己去了解下。
2)ps
查看整个系统内部所运行的进程状况。
进程是一个具有一定独立功能的程序,它是操作系统动态执行的基本单元。
该命令可以查看进程的详细状况,使用格式如下:
ps [选项]
部分参数:
-e 显示所有进程。 -f 全格式。 -h 不显示标题。 -l 长格式。 -w 宽输出。 -r 只显示正在运行的进程。 -a:即all,查看当前系统所有用户的所有进程 -u:查看进程所有者及其他一些详细信息 -x:显示没有控制终端的进程
ps aux ps -ef
这两种组合是我们常用的查看所有进程的命令。
关于这些字段的解释:
USER 用户名 UID 用户ID(User ID) PID 进程ID(Process ID) %CPU 进程的cpu占用率 %MEM 进程的内存占用率 VSZ 进程所使用的虚存的大小(Virtual Size) RSS 进程使用的驻留集大小或者是实际内存的大小,Kbytes字节。 TTY 与进程关联的终端(tty) STAT 进程的状态:进程状态使用字符表示的(STAT的状态码) R 运行 Runnable (on run queue) 正在运行或在运行队列中等待。 S 睡眠 Sleeping 休眠中, 受阻, 在等待某个条件的形成或接受到信号。 I 空闲 Idle Z 僵死 Zombie(a defunct process) 进程已终止, 但进程描述符存在, 直到父进程 调用wait4()系统调 用后释放。 D 不可中断 Uninterruptible sleep (ususally IO) 收到信号不唤醒和不可运行, 进程必须等待直到有中 断发生。 T 停止 Terminate 进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行。 P 等待交换页 W 无驻留页 has no resident pages 没有足够的记忆体分页可分配。 X 死掉的进程 < 高优先级进程 高优先序的进程 N 低优先 级进程 低优先序的进程 L 内存锁页 Lock 有记忆体分页分配并缩在记忆体内 s 进程的领导者(在它之下有子进程); l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads) + 位于后台的进程组 START 进程启动时间和日期 TIME 进程使用的总cpu时间 COMMAND 正在执行的命令行命令
大家看下TTY这一栏:
?意思没有控制终端,是不能与用户进行交互的进程。
去掉x
ps au
只显示有控制终端的进程。f参数,以tree的形式显示进程与进程之间的父子关系。
PPID 父进程的进程ID(Parent Process id)
主要用来查看进程的父ID是多少。
其他一些字段解释:
NI 优先级(Nice) PRI 进程优先级编号(Priority) WCHAN 进程正在睡眠的内核函数名称;该函数的名称是从/root/system.map文件中获得的。 FLAGS 与进程相关的数字标识
查看一个进程的线程总量:
ps -o nlwp PID
拓展:
使用ps aux命令,一次性显示所有的进程,看起来费劲。假如我们只查看特定的某个进程,就可以使用管道|来过滤。
提示:grep查询是需要占用一个进程的,如果结果有一条,表示没有查询的进程。