奇怪的 grep 进程列表

奇怪的 grep 进程列表

当我运行时,ps fax|grep grep它显示一个进程,例如:

 2618 pts/0    R+     0:00              \_ grep --color=auto grep

那就没问题了,但是当我运行ps fax|grep -v dummy_textgrep 时,进程不在列表中!

  PID TTY      STAT   TIME COMMAND
    2 ?        S      0:00 [kthreadd]
    3 ?        S      0:02  \_ [ksoftirqd/0]
    5 ?        S      0:00  \_ [kworker/u:0]
    6 ?        S      0:00  \_ [migration/0]
    7 ?        S<     0:00  \_ [cpuset]
    8 ?        S<     0:00  \_ [khelper]
    9 ?        S<     0:00  \_ [netns]
   10 ?        S      0:00  \_ [sync_supers]
   11 ?        S      0:00  \_ [bdi-default]
   12 ?        S<     0:00  \_ [kintegrityd]
   13 ?        S<     0:00  \_ [kblockd]
   14 ?        S<     0:00  \_ [kacpid]
   15 ?        S<     0:00  \_ [kacpi_notify]
   16 ?        S<     0:00  \_ [kacpi_hotplug]
   17 ?        S<     0:00  \_ [ata_sff]
   18 ?        S      0:00  \_ [khubd]
   19 ?        S<     0:00  \_ [md]
   20 ?        S      0:00  \_ [khungtaskd]
   22 ?        S      0:00  \_ [kswapd0]
   23 ?        SN     0:00  \_ [ksmd]
   24 ?        S      0:00  \_ [fsnotify_mark]
   25 ?        S<     0:00  \_ [aio]
   26 ?        S      0:00  \_ [ecryptfs-kthrea]
   27 ?        S<     0:00  \_ [crypto]
   31 ?        S<     0:00  \_ [kthrotld]
   32 ?        S      0:00  \_ [kworker/0:1]
   33 ?        S      0:00  \_ [scsi_eh_0]
   34 ?        S      0:00  \_ [scsi_eh_1]
   35 ?        S      0:00  \_ [kworker/u:2]
   37 ?        S<     0:00  \_ [kmpathd]
   38 ?        S<     0:00  \_ [kmpath_handlerd]
   39 ?        S<     0:00  \_ [kondemand]
   40 ?        S<     0:00  \_ [kconservative]
   41 ?        S      0:00  \_ [kworker/0:2]
  172 ?        S      0:00  \_ [scsi_eh_2]
  185 ?        S<     0:00  \_ [kdmflush]
  198 ?        S<     0:00  \_ [kdmflush]
  206 ?        S      0:00  \_ [jbd2/dm-0-8]
  207 ?        S<     0:00  \_ [ext4-dio-unwrit]
  447 ?        S<     0:00  \_ [kpsmoused]
 2357 ?        S      0:00  \_ [flush-251:0]
    1 ?        Ss     0:00 /sbin/init
  181 ?        S      0:00 /lib/udev/watershed sh -c /sbin/lvm vgscan; /sbin/lvm vgchange -a y
  182 ?        S      0:00  \_ sh -c /sbin/lvm vgscan; /sbin/lvm vgchange -a y
  184 ?        S<L    0:00      \_ /sbin/lvm vgchange -a y
  258 ?        S      0:00 upstart-udev-bridge --daemon
  266 ?        S<s    0:00 udevd --daemon
  433 ?        S<     0:00  \_ udevd --daemon
  434 ?        S<     0:00  \_ udevd --daemon
  365 ?        Sl     0:00 rsyslogd -c4
  436 ?        Ss     0:00 dhclient3 -e IF_METRIC=100 -pf /var/run/dhclient.eth0.pid -lf /var/lib/dhcp3/dhclient.eth0.leases eth0
  473 ?        Ss     0:00 /usr/sbin/sshd -D
  828 ?        Ss     0:00  \_ sshd: censored_user [priv]
  850 ?        S      0:00  |   \_ sshd: censored_user@notty
  851 ?        Ss     0:00  |       \_ /usr/lib/openssh/sftp-server
 2369 ?        Ss     0:00  \_ sshd: censored_user [priv]
 2395 ?        S      0:00      \_ sshd: censored_user@pts/0
 2396 pts/0    Ss     0:01          \_ -bash
 2622 pts/0    R+     0:00              \_ ps fax
  511 ?        S      0:00 upstart-socket-bridge --daemon
  587 tty4     Ss+    0:00 /sbin/getty -8 38400 tty4
  590 tty5     Ss+    0:00 /sbin/getty -8 38400 tty5
  593 tty2     Ss+    0:00 /sbin/getty -8 38400 tty2
  594 tty3     Ss+    0:00 /sbin/getty -8 38400 tty3
  596 tty6     Ss+    0:00 /sbin/getty -8 38400 tty6
  602 ?        Ss     0:00 cron
  603 ?        Ss     0:00 atd
  826 tty1     Ss+    0:00 /sbin/getty -8 38400 tty1

这怎么可能呢?

答案1

选项-v告诉grep仅有的显示线不包含给定文本。ps输出行包含dummy_text,因此被跳过。换句话说,您只是告诉 grep 忽略自身。

答案2

这是因为 grep 在微时钟周期内运行的同时,也在抓取自身。你正在实例化一个 grep 实例来寻找自身,果然,它找到了自己。然后消失,因为进程在一瞬间终止。可以说,Grep 只是在镜子中获取自己的快照,仅此而已。

与其他(第二个)查询相比,它表示我只查找这个特定查询。'-v' 与选择不匹配的行相同。当然,grep 中的查询将包含此类行。由于它在进程的参数中,因此被忽略。

相关内容