两个问题:
pf -fU <user>
ps -ef | grep <user>
当或 可以时不显示特定的用户进程ps aux
。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 中看到。