web-dev-qa-db-ja.com

トレースファイル内のこれらの不明なPODを使用した「メイン」プロセスとは何ですか?

どのプロセスが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

驚いたことに、ps -ef | grep $THE_PID($ THE_PIDは1715)を使用してgrepを実行すると、出力の多くの行にリストされているPIDは存在しません。また、タスク名は私には不明であり、ps出力にも存在しません。

さらに、entireリストはすべてgmain-<some number>のようなタプルです。予期されたpostgresまたはnodeではありません。では、このgmainプロセスは何ですか?そして、/ proc /に存在しないこれらのPIDは何ですか?私がそれらにアクセスしようとする時までにそれらは歴史的ですか?

gmainはものであることがわかります これらのカーネルドキュメントでは、トレースに関するTheodore Ts'oによる なので、何か

1
oligofren

これらはプロセスではありません。これらはタスクです。 Linuxはタスクの観点から機能します。 これらのタスクが発生するため、プロセスリストにIDが表示されませんプロセス内のスレッドになります。それらは、どこかのマルチスレッド [〜#〜] gio [〜#〜] プロセスのワーカースレッドです。それらは、task/サブディレクトリの/proc/<process>サブディレクトリにあります(例/proc/860/task/926)。

3
JdeBP

疑われるように、このgmainプロセスはGTKまたはGnomeと関係がありましたが、注意すべきことは、それがプロセスではなく、スレッド)であったということです。(gtkメインループ)! psをgrepしたときに表示されなかったのもそのためです。

-qオプションをpsに使用すると、これを理解しました。これにより、関心のあるpidを一覧表示できます。表示されたpidは、オプションとして渡したものではありませんでしたが、 pstree -pを実行したときにまだ表示されていたため、これはおそらく何らかのスレッドであると思われました。

新しく見つけた知識を使用して、ps-Lオプションを指定することで、独自のPID(これは正しい名前ですか?)を持つすべてのスレッドを一覧表示できることがわかりました。

例:Sudo ps -efL -q 906

これ(およびpstree)により、スレッドがNetworkManagerに属していることがわかりました。

0
oligofren