Gibt es eine Möglichkeit, in Echtzeit zu wissen, welche Threads geöffnet sind und welche Anwendung sie geöffnet hat?Wie können Sie die von jeder Anwendung in Linux geöffneten Threads auflisten?
Antwort
Sie können in /proc/<PID>/task/
suchen (<PID>
ist eine Prozess-ID), die eine Anzahl von Unterverzeichnissen haben wird, jedes mit dem Namen gleich der Thread-ID eines der Threads in dieser Aufgabe.
Beachten Sie, dass dies nur eine Art von Echtzeit ist - es sei denn, Sie sollten das gesamte System für die Dauer "einfrieren", können die Informationen immer schal sein, weil ein Prozess sogar Threads erstellen oder zerstören kann wie Sie die Daten betrachten.
Ich denke, ps -L
sollte den Trick tun.
Hier ist ps
.
Nicht sicher, ob Sie fragen, wie das programmatisch zu tun, aber in diesem Fall, da ps
Open-Source ist, so können Sie wahrscheinlich einen Blick auf die Quellen.
ja programmaticaly –
Nicht sicher in welcher Sprache ich so implementieren werde. –
Ich bin mir sicher, dass jede Sprache, die Sie implementieren, 'ps' aufrufen kann. – corsiKa
In modernen Linux sind Threads Prozessen sehr ähnlich. Jeder Thread hat eine LWP-Kennung ("Lightweight Process"), die intern als PID implementiert ist. Wenn jedoch ein solcher "leichtgewichtiger Prozess" (d. H. Ein Thread) für eine PID abgefragt wird, liefert das System die PID des Prozesses, der den Thread erzeugt hat (anstelle von LWP). Beachten Sie auch, dass LWP gleich der PID ist, wenn der Prozess nur einen Thread hat.
ps
fähig ist, Fäden mit -L
Modifikator auf die Verarbeitung, wie in seinem ereOnanswer beschrieben. Aber ich sollte beachten, dass ps
nicht nur für den manuellen Aufruf ist. Es verfügt über Funktionen, um die Ausgabe so zu drucken, dass sie leicht von einem anderen Programm analysiert werden kann.
Der folgende Befehl druckt LWPs (-o lwp=
) und PIDs (-o pid=
) alle (-A
) Gewinde (-L
) im System. Jeder String stellt einen Thread, zweite Spalte ist der Prozess, der es hervorgebracht:
$ ps -A -L -o lwp= -o pid=
...
27747 27747
27749 27749
27750 27750
27751 27750
27752 27750
27755 27750
27756 27750
27772 27772
27858 27858
30457 30457
30886 30886
Ganz einfach mit C oder C++ zu analysieren, ist es nicht? Um dies aus Ihrem Programm zu lesen, können Sie popen
oder einen der C++ equivalents verwenden.
Beachten Sie, dass die Verwendung von ps
nicht nur einfacher ist als das Lesen /proc
. Es ist auch viel sicherer, als das /proc
Dateisystem manuell zu analysieren. ps
ist ein POSIX-Befehl *, es funktioniert garantiert; Es verwendet /proc
unter Linux, aber das sind interne Details. Wenn sich die zugrundeliegende Infrastruktur ändert, wird ps
umgeschrieben und funktioniert weiter, während Ihr Code, wenn er auf Basis von /proc
geschrieben wird, bricht.
* Um ehrlich zu sein, POSIX nicht -L
Schalter nicht angeben. Aber in jedem Linux, das über GNU-Toolchain verfügt, wird es verfügbar sein.
- 1. Alle geöffneten Dateien auflisten
- 2. Wie können Sie Threads im selben Prozess auflisten?
- 3. Auflisten von Threads in Windows
- 4. Wie können Sie die Übereinstimmungen von Vims Suche auflisten?
- 5. Behalten Sie die Threads in der WCF-Anwendung im Auge?
- 6. Auflisten von Browser-Registerkarten aus externer Anwendung
- 7. Anzahl der geöffneten Anwendungsfenster in Linux abrufen
- 8. Datennutzung von jeder Anwendung
- 9. Erstellen Sie ausführbare Anwendung in Linux
- 10. Können Sie alle geöffneten Fenster in Capybara schließen?
- 11. Wie können Sie remote exportierte NFSv4-Volumes auflisten?
- 12. Linux-Anwendung Profilerstellung
- 13. Maximale Anzahl von Threads, die in einer Anwendung ausgeführt werden können?
- 14. können Sie Masm in Linux kompilieren/ausführen?
- 15. Wie Sie Producer-Threads so einrichten, dass sie auf den Abschluss von Consumer-Threads warten
- 16. Wie bekomme ich die Liste der geöffneten Fenster von xserver
- 17. Anzahl der Threads in einer Middleware-Anwendung
- 18. Java-Threads: Unter Windows & On Linux
- 19. Wie erkennt Google Test die Anzahl der Threads unter Linux?
- 20. Wie man bereits geöffneten Browser aus der Anwendung in Qt
- 21. Wie können Threads ihre Operation synchronisieren?
- 22. Wie Linux-Prozess von Windows-Anwendung spawn?
- 23. Können Sie die Leistung einer Anwendung vor dem Testen einschätzen?
- 24. separate Threads in pygtk Anwendung
- 25. Können wir den Bereich jeder Android-Anwendung programmgesteuert ändern?
- 26. Wie können Sie Firefox von C# -Anwendung automatisieren?
- 27. verhindern Java-Programm von der Öffnung Threads
- 28. Wie wird die .net-Anwendung in einer Linux-Umgebung ausgeführt?
- 29. Auflisten von Audioadaptern in WinAPI
- 30. Finden Sie heraus, wie viele Threads meine Anwendung läuft?
Welches Betriebssystem? – Gianni
Ubuntu bedeutet normalerweise Linux :) –
@Nikolai meine schlechte, ich total falsch gelesen die Tags, sry. – Gianni