comando truss

Finalità

Traccia le chiamate di sistema di un processo, le chiamate di funzione di livello dell'utente caricate dinamicamente, i segnali ricevuti e le faglie di macchina sostenute.

Sintassi

capriata [ -f] [ -c] [ -a] [ -l ] [ -d ] [ -D ] [ -e] [ -i] [ { -t | -x} [!] Syscall [...] ] [ -s [!] Segnale [...] ] [ { -m }[!] Guasto  [...]] [ { -u-r | -w} [!] FileDescriptor [...] ] [ { } [!]Nome della biblioteca [...]:: [!]Nome della funzione [ ... ] ] [ -o Profilo esterno] {Comando| -p pid [. . .]}[-X]

Descrizione

Il comando truss esegue un comando specificato o si collega agli ID dei processi elencati e produce una traccia delle chiamate di sistema, dei segnali ricevuti e delle faglie di macchina un processo incurante. Ogni riga dell'output della traccia riporta il nome Fault o Signal oppure il nome Syscall con parametri e valori di ritorno. Le subroutine definite nelle librerie di sistema non sono necessariamente le esatte chiamate di sistema effettuate al kernel. Il comando truss non riporta queste subroutine, ma piuttosto, le chiamate di sistema sottostanti.  Quando possibile, i parametri di chiamata di sistema vengono visualizzati simbolicamente utilizzando le definizioni dai file di intestazione del sistema rilevanti. Per i parametri del puntatore del nome percorso, truss visualizza la stringa a cui punta. Per impostazione predefinita, le chiamate di sistema non definite vengono visualizzate con il loro nome, tutti gli otto possibili argimenti e il valore di ritorno in formato esadecimale.

Quando il flag -o viene utilizzato con trusso se l'errore standard viene reindirizzato ad un file non terminale, truss ignora i processi di hangup, interrupt e segnali. Questo facilita la traccia di programmi interattivi che catturano interrupt e quit segnali dal terminale.

Se l'output della traccia rimane indirizzato al terminale o se i processi esistenti vengono tracciati (utilizzando il flag -p ), allora truss risponde a hangup, interruzione, e quit segnali rilasciando tutti i processi di tracciamento e uscita. Ciò consente all'utente di terminare un'emissione di traccia eccessiva e di rilasciare processi precedentemente esistenti. I processi rilasciati continuano a funzionare normalmente.

Per quelle opzioni che prendono un argomento di elenco, il nome all può essere utilizzato come abbreviato per specificare tutti i possibili membri dell'elenco. Se la lista inizia con un !, il significato dell'opzione è negata (ad esempio, escludere piuttosto che traccia). Possono essere specificate più ricorrenze della stessa opzione. Per lo stesso nome in un elenco, le opzioni successive (quelle a destra) sostituiscono quelle precedenti (quelle a sinistra).

Ogni colpa della macchina, ad eccezione di una faglia di una pagina, comporta un segnale di invio di un segnale al processo che ha sostenuto la colpa. Un report di un segnale ricevuto segue immediatamente ogni segnalazione di un guasto della macchina, a meno che tale segnale non venga bloccato dal processo.

Per evitare le collisioni con altri processi di controllo, truss non traccia un processo che rileva viene controllato da un altro processo con l'interfaccia /proc .

L'output della traccia per più processi non viene prodotto in rigoroso ordine di tempo. Ad esempio, una lettura su un tubo può essere riportata prima della scrittura corrispondente. Tuttavia, per ogni processo l'output è strettamente tempo - ordinato. L'output della traccia contiene caratteri di scheda e le fermate di schede standard sono impostate in ogni otto posizioni.

Il sistema può esaurire gli slot di processo per utente quando si tracciano i bambini. Questo perché quando si traccia più di un processo, truss viene eseguito come un processo di controllo per ogni processo che viene tracciato, raddoppiando il numero di slot di processo utilizzati per qualsiasi processo dato. Il consueto limite imposto dal sistema di 25 processi per utente deve essere preso in considerazione prima di eseguire una traccia su più processi

Il sistema operativo impone alcune limitazioni di sicurezza alla tracciabilità dei processi. È necessario disporre dei privilegi di accesso ai comandi che si stanno tracciando. I processi set - uid e set - gid possono essere rintracciati solo da un utente privilegiato. Il comando truss perde il controllo di qualsiasi processo che esegue un'esecuzione di un file oggetto impostato o non leggibile, a meno che non venga eseguito da un utente privilegiato. Questi processi non tracciati continuano normalmente e indipendentemente dal truss dal punto di esecuzione.

I processi di leggerezza (LWP) indicati nell'output truss sono davvero thread del kernel. L'opzione -l visualizza l'id LWP (cioè l'id del thread) su ogni riga dell'output della traccia.

Le funzioni della libreria utente nelle librerie AIX® hanno chiamate di funzione sia statiche che dinamiche. La traccia con opzione -u viene effettuata solo per le chiamate di funzione caricate dinamicamente.

La funzione di chiamata della funzione di livello utente per le chiamate di funzione caricate dinamicamente viene fornita con opzione -u . Questa opzione produrrà una traccia di ingresso / uscita delle chiamate di funzione.

Indicatori

Elemento Descrizione
-a Visualizza le stringhe di parametri che vengono passate in ogni chiamata di sistema exec.
-c Conta le chiamate di sistema tracciate, i difetti e i segnali piuttosto che la visualizzazione dei risultati della traccia riga per riga. Un report di riepilogo viene prodotto dopo che il comando tracciato termina o quando truss viene interrotto. Se viene utilizzato anche il flag -f , i conteggi includono tutti i Syscalls, Errori E Segni di tracciamento per i processi child.
-d Verrà inclusa una registrazione data / ora con ogni riga di output. Il tempo visualizzato è in secondi relativo all'inizio della traccia. La prima riga dell'output della traccia mostrerà il tempo base da cui vengono misurati i singoli francobolli. Per impostazione timestamp predefinite non vengono visualizzati.
-D Il tempo delta viene visualizzato su ogni riga di output. Il tempo delta rappresenta il tempo trascorso per il LWP che ha sostenuto l'evento dall'ultimo evento segnalato sostenuto da quel thread. Per i tempi delta predefiniti non vengono visualizzati.
-e Visualizza le stringhe di ambiente che vengono passate in ogni chiamata di sistema exec.
-F Segue tutti i bambini creati dalla chiamata di sistema fork e include i relativi segnali, difetti e chiamate di sistema nell'output della traccia. Normalmente viene tracciato solo il comando o il processo di primo livello. Quando viene specificato il flag -f , l'id di processo è incluso con ogni riga di output di traccia per mostrare quale processo ha eseguito la chiamata di sistema o ricevuto il segnale.
-i Conserva le chiamate di sistema di riposo interrompibili dall'essere visualizzate. Alcune chiamate di sistema sui dispositivi terminali o sui tubi, come open e kread, possono dormire per periodi indefiniti e sono interrotte. Normalmente, truss segnala tali chiamate del sistema dorato se rimangono addormentate per più di un secondo. La chiamata di sistema viene quindi riportata una seconda volta quando si completa. Il flag -i provoca che tali chiamate di sistema vengano riportate solo una volta, al completamento.
-l Visualizzare l'id (id thread) del processo LWP responsabile insieme all'output truss. Per impostazione predefinita LWP id non viene visualizzato nell'output.
- m [! ]Guasto Traccia le faglie della macchina nel processo. I difetti della macchina da tracciare devono essere separati l'uno dall'altro da una virgola. Gli errori possono essere specificati in base al nome o al numero (consultare il file di intestazione sys/procfs.h ). Se la lista inizia con il "!" simbolo, gli errori specificati sono esclusi dall'essere rintracciati e non vengono visualizzati con l'output della traccia. Il default è -mall -m!fltpage.
-o Profilo esterno Designa il file da utilizzare per l'output della traccia. Per impostazione predefinita, l'output va a errore standard.
-p Interpreta i parametri su truss come elenco di id di processo per un processo esistente piuttosto che come comando da eseguire. truss prende il controllo di ogni processo e inizia la traccia, a condizione che l'id utente e il gruppo id del processo corrispondo a quelli dell'utente o che l'utente sia un utente privilegiato. 
- r [! ] FileDescriptor Visualizza il contenuto completo del buffer I/O per ogni lettura su uno qualsiasi dei descrittori di file specificati. L'output viene formattato 32 bytes per riga e mostra ogni byte sia come carattere ASCII (preceduto da uno spazio) o come sequenza di escape della lingua C a due caratteri per i caratteri di controllo, come la linguetta orizzontale (\t) e la newline (\n). Se l'interpretazione ASCII non è possibile, il byte viene mostrato in rappresentazione esadecimale a due caratteri. Vengono mostrati i primi 12 bytes del buffer I/O per ogni lettura tracciata, anche in assenza del flag -r . Il default è -r! tutti
- s [! ] Segnale Consente di elencare Signals per tracciare o escludere. Vengono tracciati quei segnali specificati in un elenco (separato da una virgola). L'output della traccia riporta la ricezione di ogni segnale specificato anche se il segnale viene ignorato, ma non bloccato, dal processo. I segnali bloccati non vengono ricevuti fino a quando il processo non li rilascia. I segnali possono essere specificati per nome o numero (vedere sys/signal.h). Se la lista inizia con il "!" simbolo, i segnali elencati sono esclusi dall'essere visualizzati con l'output della traccia. Il default è -s all
- t [! ] Syscall Include o esclude le chiamate di sistema dal processo di traccia. Le chiamate di sistema da tracciare devono essere specificate in un elenco e separate da virgoli. Se la lista inizia con un "!" simbolo, le chiamate di sistema specificate sono escluse dall'output della traccia. Il default è -alto.
- u [!] LibraryName [...]::[!]FunctionName [...]] ]

Traccia dinamicamente la funzione di livello utente caricata dinamicamente dalle librerie degli utenti. LibraryName è un elenco separato da virgole di nomi libreria. FunctionName è un elenco separato da virgole di nomi funzione. In entrambi i casi i nomi possono includere metacaratterie di nome - matching *, ?, [] con gli stessi significati interpretati dal guscio ma come applicati agli spazi della libreria / funzione e non ai file.

Un ! leader su entrambi i listino specifica una lista di esclusione di nomi di librerie o funzioni da non rintracciare. L'esclusione di una libreria esclude tutte le funzioni in quella libreria. Qualsiasi elenco di funzioni che segue un elenco di esclusione della libreria viene ignorato. Possono essere specificate più opzioni -u e sono onorate di sinistra. Per impostazione predefinita non vengono tracciate chiamate di libreria / funzione.

- w [! ] FileDescriptor Visualizza il contenuto del buffer I/O per ogni scrittura su uno qualsiasi dei descrittori di file elencati (vedi -r). Il default è -w! tutti
- x [! ] Syscall Visualizza i dati dai parametri specificati delle chiamate sytem tracciate in formato raw, di solito esadecimale, piuttosto che simbolicamente. Il default è -x! tutti
-X

Visualizza i dati dai parametri specificati di chiamate di sistema tracciati in formato leggibile umano. Le chiamate di sistema supportate sono bind, connect, socketpair, lseek, creat, access, accept sockete statx.

Sicurezza

Attenzione agli utenti RBAC e agli utenti Trusted AIX: Questo comando può eseguire operazioni privilegiate. Solo gli utenti privilegiati possono eseguire operazioni privilegiate. Per ulteriori informazioni su autorizzazioni e privilegi, vedere Database dei comandi privilegiati in Sicurezza. Per un elenco dei privilegi e delle autorizzazioni associate a questo comando, vedere il comando 'lssecattr o il sottocomando 'getcmdattr.

Esempi

  1. Per produrre una traccia del comando find sul terminale, digitare:
    truss find . -print >find.out
  2. Per tracciare le chiamate lseek, close, statx e open system, digitare:
    truss -t lseek,close,statx,open find . -print > find.out
  3. Per visualizzare l'id del thread insieme al regolare output per il comando find , inserire:
    truss -l find . -print >find.out 
  4. Per visualizzare i timestamp insieme al regolare output per il comando find , inserire:
    truss -d find . -print >find.out 
  5. Per visualizzare i tempi delta insieme all'output regolare per il comando find , inserire:
    truss -D find . -print >find.out 
  6. Per tracciare la chiamata di funzione malloc () ed escludere la chiamata di funzione strlen () nella libreria libc.a durante l'esecuzione del comando ls , immettere:
    truss -u libc.a::malloc,!strlen ls 
  7. Per tracciare tutte le chiamate di funzione nella libreria libc.a con nomi che iniziano con "m" ed escludere la chiamata di funzione strlen () nella libreria libc.a durante l'esecuzione del comando ls , immettere:
    truss -u libc.a::m*,!strlen ls 
  8. Per tenere traccia di tutte le chiamate di funzione nella libreria libc.a con nomi che iniziano con "m" durante l'esecuzione del comando ls , immettere:
    truss -u libc.a::m* ls
  9. Per tracciare tutte le chiamate di funzione dalla libreria libcurses.a ed escludere le chiamate da libc.a durante l'esecuzione dell'eseguibile foo, immettere:
    truss -u libcurses.a,!libc.a::* foo 
  10. Per eseguire la traccia della chiamata alla funzione refresh () da libcurses.a e della chiamata alla funzione malloc () da libc.a durante l'esecuzione dell'eseguibile foo, immettere:
     truss -u libc.a::malloc -u libcurses.a::refresh foo
  11. Per tracciare il sistema richiama argomenti in formato leggibile umano, inserire:
    truss -X -t lseek,bind,statx,creat find . -print > find.out

File

File system /proc