在使用ps aux
查找进程的 PID 时,我遇到了一些阻止我这样做的输出。上个月,我在同一台服务器上做过这件事。今天的输出如下:
(向右滚动 → → → →)
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 192652 2472 ? Ss 2017 194:50 [systemd]
root 2 0.0 0.0 0 0 ? S 2017 0:00 [kthreadd/153968]
root 3 0.0 0.0 0 0 ? S 2017 1:47 [khelper/153968]
root 95 0.0 0.0 41608 120 ? Ss 2017 0:00 !! ?\??? ? ????
root 115 0.0 0.1 586308 2760 ? Ssl 2017 18:36 !! ?\??? ?
postfix 117 0.0 0.0 404692 516 ? Ssl 2017 10:33 !! ?\??? ? ???? ? ? ? d ? @ @ ? 8 ? ? ?
dbus 131 0.0 0.0 24412 900 ? Ss 2017 123:06 !! ?\??? ? ???? ? ? ? d ? @ @ ?
root 166 0.0 0.0 11696 524 ? Ss 2017 2:36 !! ?\??? ?
root 168 0.0 0.0 80308 280 ? Ss 2017 0:55 !! ?\???
root 175 0.0 0.0 27060 408 ? Ss 2017 0:07 !! ?\??? ? ???? ? ? ?
dovecot 182 0.0 0.0 9384 428 ? S 2017 1:19 !! ?\?
root 183 0.0 0.0 9516 548 ? S 2017 0:47 !! ?
root 204 0.0 0.0 124168 440 ? Ss 2017 7:01 !! ?\??? ?
root 205 0.0 0.0 6404 8 tty2 Ss+ 2017 0:00 !! ?\??? ? ????
root 206 0.0 0.0 109984 8 tty1 Ss+ 2017 0:00 !! ?\??? ? ???? ? ? ? d ?
named 239 0.0 0.0 243560 2036 ? Ssl 2017 0:06 !! ?\??? ? ???? ? ? ? d ? @ @
mysql 264 0.0 0.0 113208 8 ? Ss 2017 0:00 !! ?\??? ? ???? ? ?
root 582 0.0 1.3 823592 28404 ? Sl 2017 327:08 !! ?\??? ? ???? ? ? ? d ? @ @ ? 8 ? ? ?
root 799 0.0 0.0 12064 580 ? S 2017 19:14 !! ?\??? ?
root 998 0.0 0.0 88896 456 ? Ss 2017 45:47 !! ?\??? ? ????
postfix 1045 0.0 0.0 89196 720 ? S 2017 34:05 !! ?\??? ?
postfix 1083 0.0 0.0 89104 520 ? S 2017 1:33 !! ?\??? ?
mysql 1088 0.1 14.2 3096344 299164 ? Sl 2017 934:25 !! ?\??? ? ???? ? ? ? d ? @ @ ? 8 ? ? ? ???H? ? ? ??@ ? ?? ? ?? ? ?? ? ?? ?
drweb 1238 0.0 7.2 394364 153036 ? Ss 2017 5:19 !! ?\??? ? ???? ?
root 2696 0.0 0.0 24220 1692 ? Ss 16:41 0:01 !! ?\??? ? ????
root 2819 0.0 0.3 36768 6440 ? Ss 16:42 0:00 /usr/lib/systemd/systemd-journald
root 4231 0.0 0.2 272824 4972 ? Ss 01:09 0:15 !! ?\??? ? ???? ? ? ? d ? @ @ ? 8 ? ? ? ???H? ? ? ??@ ? ?? ? ?? ? ?? ? ?? ?
popuser 4232 0.0 0.1 272824 2200 ? S 01:09 0:00 !! ?\??? ? ???? ? ? ? d ? @ @ ? 8 ? ? ? ???H? ? ? ??@ ? ?? ? ?? ? ?? ? ?? ?
drweb 4296 0.0 7.2 394364 151984 ? S 01:09 0:01 !! ?\??? ? ???? ?
root 6223 0.0 0.1 507440 2348 ? Ss May13 12:06 !! ?\??? ? ???? ? ?
root 6626 0.0 0.1 472820 3784 ? Ss May13 1:05 !! ?\??? ? ???? ? ? ? d ? @ @ ? 8 ? ? ? ???H? ? ?
root 7405 0.0 0.2 267892 5980 ? Ss May11 6:44 !! ?\??? ? ???
root 8205 0.0 0.0 52784 1656 ? Ss May08 0:00 !! ?\??? ? ???? ? ? ?
apache 8360 0.0 0.0 266712 1832 ? S Jul22 0:00 !! ?\??? ? ???
apache 8361 0.0 0.0 267892 1740 ? S Jul22 0:03 !! ?\??? ? ???
apache 8362 0.0 0.3 2248416 7956 ? Sl Jul22 1:52 !! ?\??? ? ???
apache 8363 0.0 0.3 2248416 8204 ? Sl Jul22 1:31 !! ?\??? ? ???
apache 8389 0.0 0.4 2248416 8668 ? Sl Jul22 2:38 !! ?\??? ? ???
apache 8577 0.0 0.4 2248416 9488 ? Sl Jul22 3:54 !! ?\??? ? ???
root 12484 0.0 0.1 217092 3336 ? Ss Jul05 7:00 !! ?\??? ? ???? ? ? ? d
# ... snip ...
输出中稍后会显示一些有效命令。但是,大部分ps
输出都包含这些垃圾!! ?\??? ?
输出。但是,正如您所见,其中许多命令已经运行了很长时间——它们也曾经是有效命令。
首先,如果这个输出有一个正当的理由......它是什么?
其次,这是我应该担心的事情吗?
答案1
我以前没见过这种情况,所以我只能猜测。但我认为包含进程参数的内存页已被调出到交换空间,并且这些页面不会从交换空间读回以显示参数。
该命令ps aux
从 /proc/$PID/cmdline 读取命令行。您可以查看某些进程的十六进制转储,以及输出正确的其他进程。如果有效输出针对较新的进程,则将支持该理论。自上个月它工作以来,您可能知道某些进程消耗了大量内存并导致未使用的页面被写入交换。程序启动后很少需要程序参数,因此除非同一内存页面上有其他内容,否则没有必要将这些页面再次加载到内存中。