Xorg 没有出现在 ps aux 中?

Xorg 没有出现在 ps aux 中?

在 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我相信(但不确定)它确实execs,因此ps显示的命令行保持不变,程序现在不同了。可以通过检查进程的/proc目录来验证这一点:

$ sudo ls -l /proc/30664/exe 
lrwxrwxrwx 1 root root 0 Jun 24 08:09 /proc/30664/exe -> /usr/bin/Xorg

这就是为什么pgrep Xorgkillall Xorg可以工作,但pgrep -f Xorg失败了。pgrep -f搜索命令行,仍然显示X,而不是Xorg。因此,通常应该返回更好结果的操作实际上结果更糟。


确实如此Xexec使用这个答案

$ nm -D /usr/bin/X  | grep exec
                 U execv

相关内容