ps 和 top 命令是否仅限于进程?

ps 和 top 命令是否仅限于进程?

如果我运行命令 ps 或 top,它们是否只列出进程,还是同时列出服务和进程?如何判断给定行代表的是进程还是服务?

答案1

首先,术语服务在 Linux 环境中很少使用。更常见的是术语守护进程

虽然这两个术语描述的是同一类型的应用,但术语服务通过在 Windows 环境中使用该术语,确实具有一些附加属性。

守护进程与普通的进程的定义很简单,守护进程是一个后台进程,不与用户交互。但最重要的是,守护进程只是一个术语。据我所知,Linux 中没有标志告诉它“此进程是一个守护进程“。

ps因此守护进程并没有什么特别之处。我们只是将某种类型的程序称为守护进程。这也是为什么或没有任何区别top

但是如果你想知道当前正在运行的哪个进程最有可能是我们想到的守护进程,请尝试ps axjf

oliver@ubuntuServer:~$ ps axjf
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
    0     2     0     0 ?           -1 S        0   0:00 [kthreadd]
    2     3     0     0 ?           -1 S        0   0:01  \_ [ksoftirqd/0]
    2     5     0     0 ?           -1 S        0   0:00  \_ [kworker/u:0]
    2     6     0     0 ?           -1 S        0   0:00  \_ [migration/0]
    2     7     0     0 ?           -1 S        0   0:00  \_ [migration/1]
    2     9     0     0 ?           -1 S        0   0:00  \_ [ksoftirqd/1]
    2    10     0     0 ?           -1 S        0   0:09  \_ [kworker/0:1]
    2    11     0     0 ?           -1 S        0   0:00  \_ [migration/2]
    2    12     0     0 ?           -1 S        0   0:00  \_ [kworker/2:0]
    2    13     0     0 ?           -1 S        0   0:00  \_ [ksoftirqd/2]
    2    14     0     0 ?           -1 S        0   0:00  \_ [migration/3]
    2    15     0     0 ?           -1 S        0   0:00  \_ [kworker/3:0]
    2    16     0     0 ?           -1 S        0   0:00  \_ [ksoftirqd/3]
    2    17     0     0 ?           -1 S<       0   0:00  \_ [cpuset]
    2    18     0     0 ?           -1 S<       0   0:00  \_ [khelper]
    2    19     0     0 ?           -1 S<       0   0:00  \_ [netns]
    2    20     0     0 ?           -1 S        0   0:00  \_ [kworker/u:1]
    2    21     0     0 ?           -1 S        0   0:00  \_ [sync_supers]
    2    22     0     0 ?           -1 S        0   0:00  \_ [bdi-default]
    2    23     0     0 ?           -1 S<       0   0:00  \_ [kintegrityd]
    2    24     0     0 ?           -1 S<       0   0:00  \_ [kblockd]
    2    25     0     0 ?           -1 S<       0   0:00  \_ [ata_sff]
    2    26     0     0 ?           -1 S        0   0:00  \_ [khubd]
    2    27     0     0 ?           -1 S<       0   0:00  \_ [md]
    2    28     0     0 ?           -1 S        0   0:00  \_ [khungtaskd]
    2    29     0     0 ?           -1 S        0   0:00  \_ [kworker/3:1]
    2    30     0     0 ?           -1 S        0   0:03  \_ [kswapd0]
    2    31     0     0 ?           -1 SN       0   0:00  \_ [ksmd]
    2    32     0     0 ?           -1 SN       0   0:00  \_ [khugepaged]
    2    33     0     0 ?           -1 S        0   0:00  \_ [fsnotify_mark]
    2    34     0     0 ?           -1 S        0   0:00  \_ [ecryptfs-kthrea]
    2    35     0     0 ?           -1 S<       0   0:00  \_ [crypto]
    2    43     0     0 ?           -1 S<       0   0:00  \_ [kthrotld]
    2    44     0     0 ?           -1 S        0   0:00  \_ [scsi_eh_0]
    2    45     0     0 ?           -1 S        0   0:00  \_ [scsi_eh_1]
    2    67     0     0 ?           -1 S        0   0:00  \_ [kworker/1:1]
    2    68     0     0 ?           -1 S        0   0:09  \_ [kworker/0:2]
    2   110     0     0 ?           -1 S        0   0:00  \_ [kworker/1:2]
    2   190     0     0 ?           -1 S        0   0:00  \_ [scsi_eh_2]
    2   208     0     0 ?           -1 S        0   0:00  \_ [kworker/2:1]
    2   218     0     0 ?           -1 S<       0   0:00  \_ [kdmflush]
    2   235     0     0 ?           -1 S<       0   0:00  \_ [kdmflush]
    2   243     0     0 ?           -1 S        0   0:13  \_ [jbd2/dm-0-8]
    2   244     0     0 ?           -1 S<       0   0:00  \_ [ext4-dio-unwrit]
    2   508     0     0 ?           -1 S<       0   0:00  \_ [kpsmoused]
    2 20477     0     0 ?           -1 S        0   0:00  \_ [flush-252:0]
    0     1     1     1 ?           -1 Ss       0   0:00 /sbin/init
    1   303   302   302 ?           -1 S        0   0:00 upstart-udev-bridge --daemon
    1   306   306   306 ?           -1 Ss       0   0:00 udevd --daemon
  306   438   306   306 ?           -1 S        0   0:00  \_ udevd --daemon
  306   445   306   306 ?           -1 S        0   0:00  \_ udevd --daemon
    1   562   541   541 ?           -1 Sl     101   0:04 rsyslogd -c5
    1   600   599   599 ?           -1 S        0   0:00 upstart-socket-bridge --daemon
    1   612   612   612 ?           -1 Ss     102   0:00 dbus-daemon --system --fork --activation=upstart

这是相对较新的 Ubuntu 服务器安装的输出的一部分。输出应该是分层的,这样可以更轻松地识别系统进程。

就像同一ps输出的这一部分一样。您可以清楚地看到,该链以sshd(SSH 守护进程)开始,我登录到该守护进程并为自己创建了一个用户会话。在其中,bash已启动,在 bash 中我有一个后台vi进程,我ps刚刚执行了。

 8053 20352 20352 20352 ?           -1 Ss       0   0:00  \_ sshd: oliver [priv]
20352 20378 20352 20352 ?           -1 S     1000   0:00      \_ sshd: oliver@pts/0
20378 20379 20379 20379 pts/0    20570 Ss    1000   0:00          \_ -bash
20379 20569 20569 20379 pts/0    20570 T     1000   0:00              \_ vi
20379 20570 20570 20379 pts/0    20570 R+    1000   0:00              \_ ps axjf

因此,查看这两部分ps输出,您应该能够清楚地区分守护进程和用户进程。

答案2

服务是进程,所以是的,两者都被 ps 列出。它们只是没有明确区分。服务是侦听请求或连接的进程。

您可以使用 netstat 列出正在监听的进程(因此这些进程是服务的一部分)

相关内容