有人能解释一下这种奇怪的 ps 行为吗?

有人能解释一下这种奇怪的 ps 行为吗?

两个问题:

  1. pf -fU <user>ps -ef | grep <user>当或 可以时不显示特定的用户进程ps aux

  2. pstree -p <pid>,其中 pid 是我上面提到的特定进程,可以提供子进程的输出,但ps -ef | grep <childpid>不显示任何输出。

这种奇怪的行为仅出现在与使用服务命令启动的特定 sge 服务相关的进程中,而不出现在任何其他进程中。

[root@myserver ~]# ps -fU sgeadmin
UID        PID  PPID  C STIME TTY          TIME CMD
[root@myserver ~]# ps -ef | grep sgeadmin
sgeadmin  1754     1  0 Jan21 ?        00:16:36 /ge2011.11/bin/linux-x64/sge_execd
root      4097  3982  0 18:52 pts/0    00:00:00 grep sgeadmin
sgeadmin 27248     1  0 16:59 ?        00:00:03 /ge2011.11/bin/linux-x64/sge_qmaster
[root@myserver ~]# pstree -paA 27248
sge_qmaster,27248
  |-{sge_qmaster},27255
  |-{sge_qmaster},27256
  |-{sge_qmaster},27257
  |-{sge_qmaster},27258
  |-{sge_qmaster},27263
  |-{sge_qmaster},27264
  |-{sge_qmaster},27265
  |-{sge_qmaster},27266
  |-{sge_qmaster},27267
  |-{sge_qmaster},27268
  |-{sge_qmaster},27269
  `-{sge_qmaster},27289
[root@myserver ~]# ps -ef | grep -E '27255|27256|27257|27258|27263|27264|27265|27266|27267|27268|27269|27289'
root      4274  3982  0 18:53 pts/0    00:00:00 grep -E 27255|27256|27257|27258|27263|27264|27265|27266|27267|27268|27269|27289
[root@myserver ~]#

所以我尝试启动其他进程并且它正在工作:

myserver @ /homes/sgeadmin : sleep 1000 &
[1] 4528
myserver @ /homes/sgeadmin : ps -fU sgeadmin
UID        PID  PPID  C STIME TTY          TIME CMD
sgeadmin  4482  4481  0 18:57 pts/0    00:00:00 -tcsh
sgeadmin  4528  4482  0 18:57 pts/0    00:00:00 sleep 1000
sgeadmin  4529  4482  0 18:57 pts/0    00:00:00 ps -fU sgeadmin
myserver @ /homes/sgeadmin : exit
logout
[root@myserver ~]# ps -fU sgeadmin
UID        PID  PPID  C STIME TTY          TIME CMD
sgeadmin  4528     1  0 18:57 pts/0    00:00:00 sleep 1000
[root@myserver ~]#

编辑1:

好的,ps -fu <username>给出输出。看来区别就在于真实用户ID有效用户ID。是的,在这种情况下 root 是真正的用户。

但是第二个问题有什么解释吗?pstree显示子进程而不显示ps -ef

编辑2:

好吧,这和TGID有关。

答案1

这句话回答的很清楚:https://stackoverflow.com/questions/9305992/linux-threads-and-process

在我的例子中,显示的所有子进程都是线程,因此在输出中看不到,ps -ef只能在 pstree 中看到。

相关内容