C'è un modo per sapere, in tempo reale, quali thread sono aperti e quale applicazione li ha aperti?Come elencare i thread aperti da ogni applicazione in Linux?
risposta
È possibile cercare in /proc/<PID>/task/
(dove <PID>
è un ID di processo) che avrà un numero di sottodirectory, ciascuna con il nome uguale all'ID thread di uno dei thread in tale attività.
Si noti che questo è solo in ordine di tempo reale - a meno che non si debba "congelare" l'intero sistema per la durata, le informazioni ottenute possono sempre essere obsolete, perché un processo può creare o distruggere thread anche mentre stai guardando i dati.
Immagino che ps -L
dovrebbe fare il trucco.
Qui è ps
.
Non so se chiedi come farlo a livello di programmazione, ma in questo caso, dal momento che ps
è open-source, puoi probabilmente dare un'occhiata alle fonti.
sì programmatio –
Non sicuro in quale lingua ho intenzione di implementarlo. –
Sono sicuro che qualsiasi linguaggio implementato sarà in grado di chiamare 'ps'. – corsiKa
Nei Linux moderni, i thread sono molto simili ai processi. Ogni thread ha un identificatore LWP ("processo leggero"), che è implementato internamente come PID. Tuttavia, se tale "processo leggero" (cioè il thread) viene interrogato per un PID, il sistema produce il PID del processo che ha generato il thread (invece di LWP). Nota anche che se il processo ha solo un thread, il suo LWP sarà uguale al suo PID.
ps
è in grado di elaborare le discussioni con -L
modificatore, come descritto nel suo ereOnanswer. Ma devo notare che ps
non è solo per invocazione manuale. Ha capacità di stampare l'output in modo tale da essere facilmente analizzato da un altro programma.
Il comando seguente stamperà processi leggeri (-o lwp=
) e PID (-o pid=
) di tutti (-A
) Fili (-L
) nel sistema. Ogni stringa rappresenta un filo, seconda colonna essendo il processo che ha generato esso:
$ 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
abbastanza facile da analizzare con C o C++, non è vero? Per leggerlo dal tuo programma, puoi usare popen
o uno dei suoi C++ equivalents.
Si noti che l'utilizzo di ps
non è solo più facile della lettura di /proc
. È anche molto più sicuro del parsing del file system /proc
. ps
è un comando POSIX *, è garantito che funzioni; usa /proc
sotto Linux, ma sono i dettagli interni. Al variare dell'infrastruttura sottostante, ps
verrà riscritto e continuerà a funzionare, mentre il codice, se scritto in base a /proc
, si interromperà.
* Per essere onesti, POSIX non specifica -L
interruttore. Ma in qualsiasi Linux, che abbia GNU toolchain, sarà disponibile.
- 1. gdb: come elencare i file aperti
- 2. API Linux per elencare i processi in esecuzione?
- 3. su iOS/iPhone: "Troppi file aperti": è necessario elencare i file aperti (come lsof)
- 4. Come elencare le cartelle vuote in linux
- 5. Ottenimento dell'ID thread per i thread Java in Linux
- 6. Applicazione di un'opzione a tutti i file aperti in Vim
- 7. Su Linux: imposta i file aperti massimi su illimitato. Possibile?
- 8. Identificare i file aperti un processo particolare su linux
- 9. Come elencare i tipi in archivio dati?
- 10. Delphi: ottieni i file aperti da un'applicazione
- 11. Come elencare sottodirectory non vuote su linux?
- 12. Come elencare i file installati da un determinato Windows Installer?
- 13. AngularJS - Come elencare i nomi file da una determinata cartella?
- 14. Come denominare un thread in Linux?
- 15. Uscire da zsh, ma lasciare aperti i lavori in esecuzione?
- 16. Come uscire dall'intera applicazione da un thread Python?
- 17. Implementazione thread GNU/Linux
- 18. Come elencare i repository configurati?
- 19. Come elencare i pacchetti installati in Cabal?
- 20. Come elencare i plugin disponibili in Gradle
- 21. Come elencare i produttori in kafka
- 22. Come sono terminati i thread durante un crash di Linux?
- 23. Come elencare i moduli importati?
- 24. Elenca tutti i thread
- 25. Salvare i file aperti (sessione) in NetBeans
- 26. Come elencare i file remoti da Android via Bluetooth?
- 27. Distinzione tra processi e thread in Linux
- 28. Come viene determinato il puntatore dello stack di un'attività del kernel Linux per ogni thread?
- 29. Come elencare i contenitori nell'archiviazione BLOB BLU?
- 30. Nascondere tutti i moduli aperti
Quale sistema operativo? – Gianni
Ubuntu di solito significa Linux :) –
@Nikolai mio male, ho completamente letto male i tag, sry. – Gianni