읽다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
놀랍게도 여러 줄 출력에 나열된 PID를 grep하면 그 중 아무 것도 존재하지 않습니다 ps -ef | grep $THE_PID
(여기서 $THE_PID는 1715임). 또한 작업 이름을 알 수 없으며 ps
출력에도 표시되지 않습니다.
또한,모두목록은 모두 튜플입니다. 예를 들어 예상 gmain-<some number>
되지 않습니다 . 그래서 뭐postgres
node
예이 gmain
과정? /proc/에 존재하지 않는 PID는 무엇입니까? 내가 액세스하려고 하면 역사적으로 중요한 의미가 있나요?
gmain
난 그게 한 가지라는 걸 이해해Theodore Ts'o의 커널 문서 추적 정보, 그렇군요무엇.
답변1
이것은 프로세스가 아닙니다. 이것들은 모두일. Linux는 작업을 수행합니다. 당신은 그들의 ID를 볼 수 없습니다프로세스왜냐하면 목록에이것들작업은 프로세스 내의 스레드입니다. 이는 다중 스레드 작업자 스레드입니다.지오어딘가에서 처리됩니다. 하위 디렉토리의 하위 디렉토리에서 task/
해당 항목 /proc/<process>
(예제 )을 찾을 수 있습니다 /proc/860/task/926
.
답변2
의심되는 바와 같이 이 gmain
프로세스는 GTK 또는 Gnome과 관련이 있지만 이는프로세스전혀 아니지만 하나철사(gtk 메인 루프)! greping 시 표시되지 않는 이유이기도 합니다 ps
.
관심 있는 pid를 나열할 수 있는 to 옵션을 사용할 -q
때 이 사실을 알아냈습니다 . ps
나타나는 pid는 전혀 옵션으로 건넨 것이 아니지만 이렇게 하면 계속 나타나서 pstree -p
일종의 스레드가 아닐까 하는 생각이 들게 합니다.
ps
새로 발견한 지식을 사용하여 옵션을 제공함으로써 자체 PID(정확한 이름입니까?)를 갖는 모든 스레드를 나열할 수 있다는 것을 발견했습니다 -L
.
예: sudo ps -efL -q 906
.
이로 인해 pstree
이 스레드가 )에 속해 있음을 알게 되었습니다 NetworkManager
.