Linux之ps命令
入门小站 -Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。
要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。
ps 为我们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的;如果想对进程时间监控,应该用 top 工具。
kill 命令用于杀死进程。
Linux中进程有5种状态运行(正在运行或在运行队列中等待)中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)ps工具标识进程的5种状态码D 不可中断 uninterruptible sleep (usually IO)R 运行 runnable (on run queue)S 中断 sleepingT 停止 traced or stoppedZ 僵死 a defunct (”zombie”) process命令语法ps (参数)
> ps -A
PID TTY TIME CMD
1 ? 00:11:10 systemd
2 ? 00:00:04 kthreadd
4 ? 00:00:00 kworker/0:0H
6 ? 00:00:07 ksoftirqd/0
7 ? 00:00:02 migration/0
8 ? 00:00:00 rcu_bh
9 ? 00:43:24 rcu_sched
10 ? 00:00:00 lru-add-drain
11 ? 00:00:12 watchdog/0
12 ? 00:00:10 watchdog/1
13 ? 00:00:11 migration/1
14 ? 00:06:22 ksoftirqd/1
16 ? 00:00:00 kworker/1:0H
17 ? 00:00:11 watchdog/2
...
显示指定用户启动的线程> ps -u deploy
PID TTY TIME CMD
7698 ? 00:29:50 java
13783 ? 00:16:42 java
30027 ? 00:03:20 java
显示所有进程信息和命令行> ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Jan08 ? 00:11:10 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0 0 Jan08 ? 00:00:04 [kthreadd]
root 4 2 0 Jan08 ? 00:00:00 [kworker/0:0H]
root 6 2 0 Jan08 ? 00:00:07 [ksoftirqd/0]
root 7 2 0 Jan08 ? 00:00:02 [migration/0]
ps与grep常用组合用法,查找特定进程> ps -ef | grep java
ps -ef | grep ssh
root 1394 1 0 Jan08 ? 00:04:23 /usr/sbin/sshd -D
root 30899 1394 0 22:44 ? 00:00:00 sshd: root@pts/2
root 30922 30899 0 22:44 ? 00:00:00 /usr/libexec/openssh/sftp-server
root 31625 1394 0 22:49 ? 00:00:00 sshd: root [priv]
sshd 31627 31625 0 22:49 ? 00:00:00 sshd: root [net]
root 31804 30905 0 22:50 pts/2 00:00:00 grep --color=auto ssh
将目前属于您自己这次登入的PID与相关信息列示出来> ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 R 0 1275 30905 0 80 0 - 38304 - pts/2 00:00:00 ps
4 S 0 30905 30899 0 80 0 - 28895 do_wai pts/2 00:00:00 bash
F 代表这个程序的旗标 (flag), 4 代表使用者为 super userS 代表这个程序的状态 (STAT),关于各 STAT 的意义将在内文介绍UID 程序被该 UID 所拥有PID 就是这个程序的 ID !PPID 则是其上级父程序的IDC CPU 使用的资源百分比PRI 这个是 Priority (优先执行序) 的缩写,详细后面介绍NI 这个是 Nice 值,在下一小节我们会持续介绍ADDR 这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是 "-"SZ 使用掉的内存大小WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作TTY 登入者的终端机位置TIME 使用掉的 CPU 时间。CMD 所下达的指令为何列出类似程序树的程序显示> ps -axjf
1 1394 1394 1394 ? -1 Ss 0 4:23 /usr/sbin/sshd -D
1394 30899 30899 30899 ? -1 Ss 0 0:00 \_ sshd: root@pts/2
30905 1873 1872 30905 pts/2 1872 S+ 0 0:00 | \_ grep --color=auto ssh
30899 30922 30922 30922 ? -1 Ss 0 0:00 \_ /usr/libexec/openssh/sftp-server
分页查看进程信息> ps aux | more
每一列的解释> ps aux | more
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER 进程的用户;PID 进程的ID;%CPU 进程占用的CPU百分比;%MEM 占用内存的百分比;VSZ 该进程使用的虚拟内存量(KB);RSS 该进程占用的固定内存量(KB);TTY 该进程在哪个终端上运行(登陆者的终端位置),若与终端无关,则显示(?)。若为pts/0等,则表示由网络连接主机进程;START 该进程被触发启动时间;TIME 该进程实际使用CPU运行的时间;COMMAND 命令的名称和参数;STAT状态位常见的状态字符D 无法中断的休眠状态(通常 IO 的进程);R 正在运行可中在队列中可过行的;S 处于休眠状态;T 停止或被追踪;W 进入内存交换 (从内核2.6开始无效);X 死掉的进程 (基本很少见);Z 僵尸进程;< 优先级高的进程;N 优先级较低的进程;L 有些页被锁进内存;s 进程的领导者(在它之下有子进程);l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);位于后台的进程组;把所有的进程信息输入到rumenz.txt
文件> ps aux > rumenz.txt
输出指定的字段> ps -o pid,ppid,pgrp,session,tpgid,comm
PID PPID PGRP SESS TPGID COMMAND
2292 30905 2292 30905 2292 ps
30905 30899 30905 30905 2292 bash
ps aux
和ps –aux
的区别请注意ps -aux
不同于ps aux
。POSIX和UNIX的标准要求ps -aux
打印用户名为x
的用户的所有进程,以及打印所有将由-a选项选择的过程。如果用户名为x
不存在,ps
的将会解释为ps aux
,而且会打印一个警告。这种行为是为了帮助转换旧脚本和习惯。它是脆弱的,即将更改,因此不应依赖。ps aux
和ps -ef
两者的输出结果差别不大,但展示风格不同。aux
是BSD
风格,-ef
是System V
风格。这是次要的区别,一个影响使用的区别是aux
会截断command
列,而-ef
不会。当结合grep
时这种区别会影响到结果。原文链接:https://rumenz.com/rumenbiji/...
微信公众号:入门小站
特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。
上一篇: 在FreeBSD中pkg包管理器使用实例
下一篇: 内核热补丁,真的安全么?| 龙蜥技术