どのプロセスが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による なので、何か。
これらはプロセスではありません。これらはタスクです。 Linuxはタスクの観点から機能します。 これらのタスクが発生するため、プロセスリストにIDが表示されませんプロセス内のスレッドになります。それらは、どこかのマルチスレッド [〜#〜] gio [〜#〜] プロセスのワーカースレッドです。それらは、task/
サブディレクトリの/proc/<process>
サブディレクトリにあります(例/proc/860/task/926
)。
疑われるように、このgmain
プロセスはGTKまたはGnomeと関係がありましたが、注意すべきことは、それがプロセスではなく、スレッド)であったということです。(gtkメインループ)! ps
をgrepしたときに表示されなかったのもそのためです。
-q
オプションをps
に使用すると、これを理解しました。これにより、関心のあるpidを一覧表示できます。表示されたpidは、オプションとして渡したものではありませんでしたが、 pstree -p
を実行したときにまだ表示されていたため、これはおそらく何らかのスレッドであると思われました。
新しく見つけた知識を使用して、ps
に-L
オプションを指定することで、独自のPID(これは正しい名前ですか?)を持つすべてのスレッドを一覧表示できることがわかりました。
例:Sudo ps -efL -q 906
。
これ(およびpstree
)により、スレッドがNetworkManager
に属していることがわかりました。