我的跟踪文件中带有这些未知 PID 的“gmain”进程是什么?

我的跟踪文件中带有这些未知 PID 的“gmain”进程是什么?

阅读一个找出哪个进程注册了 inotify 观察者的答案,我执行了以下命令

echo 1 | sudo tee /sys/kernel/debug/tracing/events/syscalls/sys_exit_inotify_add_watch/enable
sudo cat /sys/kernel/debug/tracing/trace 

文件的输出结果trace有一个标头,表明第一列应该包含进程的名称(任务?)以及 PID:

#                              _-----=> irqs-off
#                             / _----=> need-resched
#                            | / _---=> hardirq/softirq
#                            || / _--=> preempt-depth
#                            ||| /     delay
#           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
#              | |       |   ||||       |         |
           gmain-1715  [004] .... 23200.386116: sys_inotify_add_watch -> 0xfffffffffffffffe

令人惊讶的是,当我使用 grep 查找多行输出中列出的 PID 时,这些 PID 都不存在ps -ef | grep $THE_PID(其中 $THE_PID 将为 1715)。另外,任务名称对我来说是未知的,并且也不存在于ps输出中。

此外,全部的列表是所有元组,例如gmain-<some number>.不是预期的postgresnode。所以呢这个gmain过程?/proc/ 中不存在的这些 PID 是什么?当我尝试访问它们时,它们是否具有历史意义?

我懂了gmain是一件事在 Theodore Ts'o 的这些内核文档中关于跟踪的内容, 所以就是某物

答案1

这些不是过程。这些都是任务。 Linux 的工作原理是任务。您在 a 中看不到他们的 ID过程列出因为这些任务恰好是进程内的线程。它们是一些多线程的工作线程吉奥某处进行处理。您将在子目录task/的子目录中找到它们/proc/<process>(示例/proc/860/task/926)。

答案2

正如怀疑的那样,这gmain过程与 GTK 或 Gnome 有关,但需要注意的是,它不是一个过程根本没有,但是一个线(gtk主循环)!这也是 grep 时没有显示的原因ps

我在使用-q选项 to时理解了这ps一点,它可以让你列出你感兴趣的 pid。出现的 pid 根本不是我作为选项传递的,但在我这样做时仍然显示pstree -p,这让我想到这一点也许是某种线。

ps使用我新发现的知识,我发现我可以通过提供选项列出所有也有自己的 PID(这是正确的名称吗?)的线程-L

例子:sudo ps -efL -q 906

这(和pstree)让我发现该线程属于NetworkManager)。

相关内容