Enthält / proc / tid?

Sep 07 2020

Ich habe die Prozess-ID 1234. Dieser Prozess enthält die Thread-ID 1235.

Wenn ich benutze, ls -l /procsehe ich nur die PID (1234), aber wenn ich die Thread-Statusdatei mit öffne, cat /proc/1235/statuskann ich Daten sehen.

Warum das?

Kann ich mit C-Code direkt mit tid zugreifen? /proc/1235/memohne die Prozess-ID zu kennen?

Antworten

7 StephenKitt Sep 07 2020 at 18:58

Ja, /procenthält Verzeichniseinträge für Thread-IDs sowie Prozess-IDs, aber nur letztere werden von aufgelistet getdents, sodass lsnur Prozess-IDs angezeigt werden. Dies wird im man 5 procAbschnitt „Übersicht“ seit Release 5.00 des Manpages-Projekts beschrieben :

Unterverzeichnisse / proc / [pid]

Die Unterverzeichnisse / proc / [pid] sind sichtbar, wenn Sie durch / proc mit iterieren getdents(2)(und somit sichtbar, wenn Sie ls(1)den Inhalt von / proc anzeigen ).

Unterverzeichnisse / proc / [tid]

Die / proc / [tid] Unterverzeichnisse sind nicht sichtbar , wenn das Iterieren durch / proc mit getdents(2)(und sind somit nicht sichtbar , wenn man benutzt , ls(1)den Inhalt sehen / proc ).

Warum das?

Ich vermute, es geht darum, die Abwärtskompatibilität zu erhalten (für Programme, die geschrieben wurden, bevor Threads in ihrer aktuellen Form unter Linux existierten) und Skalierbarkeitsprobleme zu begrenzen.

Kann ich mit C-Code direkt mit tid zugreifen? /proc/1235/memohne die Prozess-ID zu kennen?

Ja, wenn Sie die Flut kennen, können Sie /proc/${tid}direkt darauf zugreifen , ohne die PID zu durchlaufen.