当我运行时,ps fax|grep grep
它显示一个进程,例如:
2618 pts/0 R+ 0:00 \_ grep --color=auto grep
那就没问题了,但是当我运行ps fax|grep -v dummy_text
grep 时,进程不在列表中!
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 中的查询将包含此类行。由于它在进程的参数中,因此被忽略。