Il comando "top" può aiutare in questo, non ha un elenco di thread raggruppato per CPU, ma piuttosto puoi vedere l'elenco dei thread (probabilmente per un singolo processo) e quali core della CPU su cui sono in esecuzione i thread
top -H -p {PROC_ID}
quindi premendo f per passare alla selezione del campo, j per abilitare la colonna CPU core e Invio da visualizzare.
Puoi anche usare ps
, qualcosa del genere:
ps -mo pid,tid,%cpu,psr -p `pgrep BINARY-NAME`
La risposta di seguito non è più precisa a partire dal 2014
Le attività non dormono in nessun core particolare. E lo scheduler non saprà in anticipo su quale core eseguirà un thread perché ciò dipenderà dall'utilizzo futuro di quei core.
Per ottenere le informazioni desiderate, cerca in /proc/
31466 (bc) S 31348 31466 31348 34819 31466 4202496 2557 0 0 0 5006 16 0 0 20 0 1 0 10196934 121827328 1091 18446744073709551615 4194304 4271839 140737264235072 140737264232056 217976807456 0 0 0 137912326 18446744071581662243 0 0 17 3 0 0 0 0 0
Attualmente non in esecuzione. Ultima esecuzione su core 3.
31466 (bc) R 31348 31466 31348 34819 31466 4202496 2557 0 0 0 3818 12 0 0 20 0 1 0 10196934 121827328 1091 184467440737095551615 4194304 4271839 0.> Struth; 0 0 0 0 0
Attualmente in esecuzione su core 2.
Per vedere cosa significano gli altri campi, dai un'occhiata al sorgente del kernel di Linux -- in particolare il do_task_stat
funzione in fs/proc/array.c
o Documentation/filesystems/stat.txt
.
Tieni presente che tutte queste informazioni potrebbero essere obsolete nel momento in cui le ottieni. Era vero a un certo punto tra quando hai fatto il open
chiamata sul file in proc e quando quella chiamata è tornata.
I thread non sono necessari per legare un particolare Core (se non lo hai appuntato). Pertanto per vedere la commutazione continua del core puoi usare (una risposta modificata di Dmitry):
watch -tdn0.5 ps -mo pid,tid,%cpu,psr -p \`pgrep BINARY-NAME\`
Ad esempio:
watch -tdn0.5 ps -mo pid,tid,%cpu,psr -p \`pgrep firefox\`