2012-12-06 11 views
5

Come si trova la dimensione dello stack di un processo? /proc/5848/status mi dà VmStk ma questo non cambiaCome misurare la dimensione dello stack di un processo?

Indipendentemente dal ciclo e dalla ricorsione che faccio nel mio programma di test, questo valore difficilmente cambia.

quando ho visto/proc/pid/status tutto il processo ha 136k e non ho idea da dove provenga quel valore.

Grazie,

+1

Stai cercando di ottenere le dimensioni dello stack dei singoli thread di un processo multi-thread? –

risposta

3

Non c'è davvero una cosa come la "dimensione dello stack di un processo" su Linux. I processi hanno uno stack iniziale, ma come vedete, raramente allocano molto dallo stack standard. Invece, i processi allocano semplicemente memoria generica dal sistema operativo e la usano come una pila. Quindi non c'è modo per il sistema operativo di sapere - quel dettaglio è visibile solo dall'interno del processo.

Un SO tipico e moderno può avere un limite di stack di 8 MB imposto dal sistema operativo. Tuttavia i processi allocano abitualmente oggetti molto più grandi sul loro stack. Questo perché l'applicazione utilizza uno stack gestito esclusivamente da applicazioni e non uno stack per quanto riguarda il sistema operativo.

Questo è sempre vero per i processi multi-thread. Per i processi a thread singolo, è possibile che stiano usando solo stack molto, molto piccoli.

1

Forse vuoi solo ottenere la mappa degli indirizzi di qualche processo. Per il processo 1234, leggere in sequenza lo pseudo file /proc/1234/maps. Per il proprio processo, leggere /proc/self/maps

Prova

cat /proc/self/maps 

per ottenere una sensazione di esso (il comando visualizza sopra la mappa degli indirizzi del processo cat eseguirlo).

Leggi la pagina man proc(5) per i dettagli.

Potresti anche essere interessato ai limiti del processo, ad es. getrlimit(2) e relative syscalls.

Non sono sicuro che le dimensioni dello stack abbiano un senso preciso, in particolare per i processi multi-thread.

Forse sei interessato ai segmenti mmap(2) con MAP_GROWSDOWN.

Problemi correlati