大厂面试必问命令!不要再说不了解了!详解+实例!
Posted Linux猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大厂面试必问命令!不要再说不了解了!详解+实例!相关的知识,希望对你有一定的参考价值。
在大厂面试中,ps 是面试常问命令,本文为大家讲解下面试常问的参数,ps 命令在日常的使用频率非常高,通常用于查看进程的状态,赶紧来看一下吧!
一、基本概念
ps (process status 的简称)用于显示当前进程状态,可以查看当前运行进程的各种信息,是从/proc目录下读取进程信息。如果要实时查看进程的状态,使用top 命令。
ps 有三种形式,如下所示:
1、 UNIX 选项,可以分组并且必须以破折号 “-” 开头,例如:ps -ef ;
2、 BSD 选项,可以分组并且不能与破折号一起使用,例如:ps aux;
3、 GNU 长选项,前面有两个破折号,例如:ps --user。
本文讲解采用第一种 UNIX 选项。
1.1 语法格式
ps [参数]…
可以没有参数或者包含多个参数。
1.2 常用参数
-A,-e : 列出所有进程;
-f : 列出所有的列,通常与其它参数结合使用;
-a : 列出所有进程,除了会话领导进程以及与终端无关的进程;
-u : 列出指定用户/用户ID的进程;
-j : 以作业形式列出进程;
-H : 显示进程层次结构;
二、实例
1. 无参数
直接执行 ps 命令,列出当前会话中的进程,如下所示:
linuxy@linuxy:~$ ps
PID TTY TIME CMD
2307 pts/1 00:00:00 bash
2677 pts/1 00:00:00 ps
linuxy@linuxy:~$
其中,各列代表的意思是:
PID : 进程 ID;
TTY : 终端类型;若当前进程与终端无关,则显示 ?。
TIME : 时间;
CMD :执行命令;
2. -A 参数
列出所有进程,也包括非当前用户的进程,如下所示:
linuxy@linuxy:~$ ps -A
PID TTY TIME CMD
1 ? 00:00:03 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:00 rcu_gp
4 ? 00:00:00 rcu_par_gp
6 ? 00:00:00 kworker/0:0H-kblockd
9 ? 00:00:00 mm_percpu_wq
10 ? 00:00:00 ksoftirqd/0
11 ? 00:00:00 rcu_sched
12 ? 00:00:00 migration/0
13 ? 00:00:00 idle_inject/0
14 ? 00:00:00 cpuhp/0
15 ? 00:00:00 cpuhp/1
......
使用 -e 参数,作用与 -A 参数相同,如下所示:
linuxy@linuxy:~$ ps -e
PID TTY TIME CMD
1 ? 00:00:03 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:00 rcu_gp
4 ? 00:00:00 rcu_par_gp
6 ? 00:00:00 kworker/0:0H-kblockd
9 ? 00:00:00 mm_percpu_wq
10 ? 00:00:00 ksoftirqd/0
11 ? 00:00:00 rcu_sched
12 ? 00:00:00 migration/0
13 ? 00:00:00 idle_inject/0
14 ? 00:00:00 cpuhp/0
15 ? 00:00:00 cpuhp/1
......
3. -f 参数
列出所有的列,显示进程更详细的信息,如下所示:
linuxy@linuxy:~$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 19:55 ? 00:00:03 /sbin/init splash
root 2 0 0 19:55 ? 00:00:00 [kthreadd]
root 3 2 0 19:55 ? 00:00:00 [rcu_gp]
root 4 2 0 19:55 ? 00:00:00 [rcu_par_gp]
root 6 2 0 19:55 ? 00:00:00 [kworker/0:0H-kblockd]
root 9 2 0 19:55 ? 00:00:00 [mm_percpu_wq]
root 10 2 0 19:55 ? 00:00:00 [ksoftirqd/0]
......
与单独使用 -e 参数相比,多出了 UID、PPID、C、STIME 四列,分别表示:
UID :用户;
PPID : 父进程ID;
C : 进程占用CPU的百分比;
STIME : 进程启动的时间;
4. -a 参数
列出所有进程,除了会话领导进程以及与终端无关的进程,如下所示:
linuxy@linuxy:~$ ps -a
PID TTY TIME CMD
1518 tty2 00:00:02 Xorg
1536 tty2 00:00:00 gnome-session-b
2733 pts/1 00:00:00 man
2743 pts/1 00:00:00 pager
2872 pts/2 00:00:00 ps
linuxy@linuxy:~$
5. -u 参数
列出指定用户/用户ID的进程,如下所示:
linuxy@linuxy:~$ ps -u linuxy
PID TTY TIME CMD
1559 ? 00:00:00 systemd
1560 ? 00:00:00 (sd-pam)
1566 ? 00:00:02 pulseaudio
1568 ? 00:00:00 tracker-miner-f
1572 ? 00:00:00 dbus-daemon
1587 ? 00:00:00 gvfsd
1592 ? 00:00:00 gvfsd-fuse
1598 ? 00:00:00 gvfs-udisks2-vo
1601 ? 00:00:00 gnome-keyring-d
......
可以列出多个用户的进程,如下所示:
linuxy@linuxy:~$ ps -u linuxy,root
PID TTY TIME CMD
1 ? 00:00:06 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:00 rcu_gp
4 ? 00:00:00 rcu_par_gp
6 ? 00:00:00 kworker/0:0H-kblockd
9 ? 00:00:00 mm_percpu_wq
10 ? 00:00:00 ksoftirqd/0
11 ? 00:00:05 rcu_sched
......
多个用户可以使用 “,” 分隔或使用多个 -u 参数。
默认情况下(不指定用户),ps 选择与当前用户具有相同有效用户 ID 并与调用者相同的终端关联的所有进程。
6. -j,-H 参数
通常 -j 和 -H 参数一起使用,如下所示:
linuxy@linuxy:~$ ps -ejH
PID PGID SID TTY TIME CMD
2 0 0 ? 00:00:00 kthreadd
3 0 0 ? 00:00:00 rcu_gp
......
......
887 887 887 ? 00:00:00 sshd
5341 5341 5341 ? 00:00:00 sshd
5456 5341 5341 ? 00:00:00 sshd
5480 5480 5480 pts/2 00:00:00 bash
......
可以看到,三个 sshd 进程以及 bash 以层次形式显示,查看下这些进程之间的关系,如下所示:
linuxy@linuxy:~$ ps -ef | grep 5341
root 5341 887 0 21:51 ? 00:00:00 sshd: linuxy [priv]
linuxy 5456 5341 0 21:51 ? 00:00:00 sshd: linuxy@pts/2
linuxy 5934 5480 0 22:50 pts/2 00:00:00 grep --color=auto 5341
linuxy@linuxy:~$
可以看到,进程 887 是 5341 的父进程,5341 是 5456 的父进程,和层次关系一一对应。
三、总结
ps 是在日常操作中使用频率很高的一个命令,上面讲解了常用的命令参数,接下来的文章还会更加深入的讲解。
参考文献:
[1] Ubuntu man 手册;
以上是关于大厂面试必问命令!不要再说不了解了!详解+实例!的主要内容,如果未能解决你的问题,请参考以下文章
大厂高级工程师面试必问系列:Java动态代理机制和实现原理详解
Android大厂面试必问的Android Framework 如何学习,如何深入了解Framework层?