大厂面试必问命令!不要再说不了解了!详解+实例!

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层?

Android大厂面试必问的Android Framework 如何学习,如何深入了解Framework层?

锦囊:大厂必问的Java面试题

大厂必问的JVM面试题

Java软件开发面试题!2021年京东Java岗面试必问