Linux常见命令ps的运用(或许是最全的)
2020-12-03 10:30
ps命令基本格式为: ps [options]
常用参数
-A 显示所有进程(同-e) -a 显示当前终端的所有进程 -u 显示进程的用户信息 -o 以用户自定义形式显示进程信息 -f 显示程序间的关系
ps字段含义
USER 进程所有者的用户名 PID 进程号 START 进程激活时间 %CPU 进程自最近一次刷新以来所占用的CPU时间和总时间的百分比 %MEM 进程使用内存的百分比 VSZ 进程使用的虚拟内存大小,以K为单位 RSS 驻留空间的大小。显示当前常驻内存的程序的K字节数。 TTY 进程相关的终端 STAT 进程状态,包括下面的状态: D 不可中断 Uninterruptible sleep (usually IO) R 正在运行,或在队列中的进程 S 处于休眠状态 T 停止或被追踪 Z 僵尸进程 W 进入内存交换(从内核2.6开始无效) X 死掉的进程 < 高优先级 N 低优先级 L 有些页被锁进内存 s 包含子进程 \+ 位于后台的进程组; l 多线程,克隆线程 TIME 进程使用的总CPU时间 COMMAND 被执行的命令行 NI 进程的优先级值,较小的数字意味着占用较少的CPU时间 PRI 进程优先级。 PPID 父进程ID WCHAN 进程等待的内核事件名
显示所有进程信息
ps -A PID TTY TIME CMD 1 ? 00:00:03 systemd 2 ? 00:00:00 kthreadd
虽然能显示所有进程,但是显示的信息却不多,基本只显示了进程id和进程名,有时候并不实用。
显示所有进程基本信息 相关参数 -e
ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 10:52 ? 00:00:03 /sbin/init splash root 2 0 0 10:52 ? 00:00:00 [kthreadd]
显示指定用户的进程
相关参数-u
ps -u root PID TTY TIME CMD 1 ? 00:00:03 systemd 2 ? 00:00:00 kthreadd
查看指定进程名相关信息
这个时候就需要配合grep使用了。
例如,查看”java“相关进程:
ps -ef|grep java root 2685 2684 2 10:55 pts/0 00:01:19 java -jar ./software/finalspeed/finalspeed_client.jar root 5423 4487 0 11:55 pts/20 00:00:00 grep --color=auto java 查看进程占用内存,cpu利用率等信息 ps -aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 185488 6188 ? Ss 10:52 0:03 /sbin/init splash root 2 0.0 0.0 0 0 ? S 10:52 0:00 [kthreadd] root 4 0.0 0.0 0 0 ? S< 10:52 0:00 [kworker/0:0H]
从上面的信息,可以看到进程的所有者、cpu占用率、内存占用率等较为详细的信息。
显示线程相关信息
相关参数-l
ps -elf
查看进程间的关系
相关参数-H,进程间关系以树形图的方式展示:
ps -ejH
查看进程的指定字段信息
有时候可能比较关注某些进程信息,ps -o可以指定要显示的列
例如:
ps -eo %cpu,%mem,vsz,rsz,start,stat,pid,sid,ni,uid,user,rss,time,command .0 0.0 0 0 10:52:51 S 365 0 - 0 root 0 00:00:00 [irq/47-mei_me] 0.0 0.0 0 0 10:52:51 S< 373 0 -20 0 root 0 00:00:00 [cfg80211] 0.0 0.0 0 0 10:52:52 S< 402 0 -20 0 root 0 00:00:00 [ktpacpid] 0.0 0.0 0 0 10:52:56 S 669 0 0 0 root 0 00:00:00 [jbd2/sda15-8]
查看指定进程指定信息
只需要在最后指定–pid参数即可。
例如:
ps -o %cpu,%mem,vsz,rsz,start,stat,pid,sid,ni,uid,user,rss,time,command --pid 2685 %CPU %MEM VSZ RSZ STARTED STAT PID SID NI UID USER RSS TIME COMMAND 2.0 1.9 5740448 159796 10:55:24 Sl+ 2685 2583 0 1000 hyb 159796 00:01:46 java -jar ./software/finalspeed/finalspeed_client.jar
进程太多时分页显示
如果进程信息较多,可能一页无法完成显示,这时可以配合使用more命令
例如:
ps -aux|more
1.不加参数执行ps命令
结果默认会显示4列信息。
PID: 运行着的命令(CMD)的进程编号
TTY: 命令所运行的位置(终端)
TIME: 运行着的该命令所占用的CPU处理时间
CMD: 该进程所运行的命令
2. 显示所有当前进程
使用 -a 参数。-a 代表 all。同时加上x参数会显示没有控制终端的进程。
$ ps -ax
这个命令的结果或许会很长。为了便于查看,可以结合less命令和管道来使用。
$ ps -ax | less
3. 根据用户过滤进程
在需要查看特定用户进程的情况下,我们可以使用 -u 参数。比如我们要查看用户'pungki'的进程,可以通过下面的命令:
$ ps -u pungki
4. 通过cpu和内存使用来过滤进程
也许你希望把结果按照 CPU 或者内存用量来筛选,这样你就找到哪个进程占用了你的资源。要做到这一点,我们可以使用 aux 参数,来显示全面的信息:
$ ps -aux | less
当结果很长时,我们可以使用管道和less命令来筛选。
默认的结果集是未排好序的。可以通过 --sort命令来排序。
根据 CPU 使用来升序排序
$ ps -aux --sort -pcpu | less
根据cpu使用排序
根据 内存使用 来升序排序
$ ps -aux --sort -pmem | less
我们也可以将它们合并到一个命令,并通过管道显示前10个结果:
$ ps -aux --sort -pcpu,+pmem | head -n 10
5. 通过进程名和PID过滤
使用 -C 参数,后面跟你要找的进程的名字。比如想显示一个名为getty的进程的信息,就可以使用下面的命令:
$ ps -C getty
如果想要看到更多的细节,我们可以使用-f参数来查看格式化的信息列表:
$ ps -f -C getty
通过进程名和PID过滤
6. 根据线程来过滤进程
如果我们想知道特定进程的线程,可以使用-L 参数,后面加上特定的PID。
$ ps -L 1213
7. 树形显示进程
有时候我们希望以树形结构显示进程,可以使用 -axjf 参数。
$ps -axjf
或者可以使用另一个命令。
$ pstree
8. 显示安全信息
如果想要查看现在有谁登入了你的服务器。可以使用ps命令加上相关参数:
$ ps -eo pid,user,args
参数 -e 显示所有进程信息,-o 参数控制输出。Pid,User 和 Args参数显示PID,运行应用的用户和该应用。
能够与-e 参数 一起使用的关键字是args, cmd, comm, command, fname, ucmd, ucomm, lstart, bsdstart 和 start。
9. 格式化输出root用户(真实的或有效的UID)创建的进程
系统管理员想要查看由root用户运行的进程和这个进程的其他相关信息时,可以通过下面的命令:
$ ps -U root -u root u
-U 参数按真实用户ID(RUID)筛选进程,它会从用户列表中选择真实用户名或 ID。真实用户即实际创建该进程的用户。
-u 参数用来筛选有效用户ID(EUID)。
最后的u参数用来决定以针对用户的格式输出,由User, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME 和 COMMAND这几列组成。
这里有上面的命令的输出结果:
show real and effective User ID
10. 使用PS实时监控进程状态
ps 命令会显示你系统当前的进程状态,但是这个结果是静态的。
当有一种情况,我们需要像上面第四点中提到的通过CPU和内存的使用率来筛选进程,并且我们希望结果能够每秒刷新一次。为此,我们可以将ps命令和watch命令结合起来。
$ watch -n 1 ‘ps -aux --sort -pmem, -pcpu’
组合 ps 和 watch
如果输出太长,我们也可以限制它,比如前20条,我们可以使用head命令来做到。
$ watch -n 1 ‘ps -aux --sort -pmem, -pcpu | head 20’
组合 ps 和 watch
这里的动态查看并不像top或者htop命令一样。但是使用ps的好处是你能够定义显示的字段,你能够选择你想查看的字段。
举个例子,如果你只需要看名为'pungki'用户的信息,你可以使用下面的命令:
$ watch -n 1 ‘ps -aux -U pungki u --sort -pmem, -pcpu | head 20’