在 tty1 上执行操作ps aux
不会将 Xorg 列为进程,但类似命令killall Xorg
可以正常工作。为什么 ps 没有列出 Xorg?
答案1
进程命令行实际上显示的是X
,而不是Xorg
:
$ ps aux | grep -w X
muru 14702 0.0 0.0 15940 956 pts/6 S+ 12:33 0:00 grep -w X
root 30664 1.9 1.6 690024 136632 tty7 Ssl+ Jun16 215:33 /usr/bin/X -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
$ pgrep X -a
30664 /usr/bin/X -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
有趣的是,pgrep Xorg
返回相同的过程:
$ pgrep Xorg -a
30664 /usr/bin/X -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
更有趣的是,扩展 pgrep
的搜索条件就不起作用了:
$ pgrep Xorg -fa
$
这是因为X
( /usr/bin/X
) 是一个包装器,它调用Xorg
我相信(但不确定)它确实exec
s,因此ps
显示的命令行保持不变,程序现在不同了。可以通过检查进程的/proc
目录来验证这一点:
$ sudo ls -l /proc/30664/exe
lrwxrwxrwx 1 root root 0 Jun 24 08:09 /proc/30664/exe -> /usr/bin/Xorg
这就是为什么pgrep Xorg
和killall Xorg
可以工作,但pgrep -f Xorg
失败了。pgrep -f
搜索命令行,仍然显示X
,而不是Xorg
。因此,通常应该返回更好结果的操作实际上结果更糟。
确实如此X
,exec
使用这个答案:
$ nm -D /usr/bin/X | grep exec
U execv