Come sapere la ragione di un processo che va in stato di sospensione e lo riattiva?


19

Quando faccio 'top', vedo il mio processo di script perl nello stato 'S'. C'è un modo per sapere, cosa sta facendo andare questo processo perl in stato di sonno e modi per svegliarlo? Qualsiasi modo di eseguire il debug per fornire ulteriori approfondimenti sulle righe nello script perl facendolo andare nello stato 'S'.

Risposte:


22

Un processo in Sstato è in genere in una chiamata di sistema bloccante, come leggere o scrivere su un file o sulla rete, oppure attendere il completamento di un altro programma chiamato.

È possibile utilizzare strace -p <pid>per scoprire quale chiamata di sistema è attualmente in corso. Produrrà un output simile

scrivere (1, "foobar" ..., 4096

il che significa che il processo sta provando a scrivere 4096 byte che iniziano con "foobar" su stdout (fd # 1) ma qualunque cosa sia stato reindirizzato è occupato e il buffer di output è pieno.


5

I processi passano agli stati di sospensione quando sono in attesa di qualcosa, in genere I / O.

Il processo sarà nello Sstato in cui sta eseguendo le letture e possibilmente le scritture che stanno bloccando. Può accadere anche durante l'attesa di semafori o altre primitive di sincronizzazione.

Non è possibile "svegliarlo": procederà solo quando saranno disponibili i dati / la risorsa che sta aspettando.

Questo è tutto normale e previsto, e di solito non è un problema. In genere, questo "programma" viene eseguito sulla riga di comando senza file:

while (<>) { print; }

trascorrerà la maggior parte del tempo in stato di sospensione, il che è positivo: non vuoi che sprechi CPU mentre è in attesa dell'input dell'utente.

Se ritieni che si tratti di un problema, prova a cambiare il modo in cui esegui l'I / O (lettura di blocchi più grandi, in piacevoli multipli della dimensione del blocco del dispositivo sottostante, eseguendo I / O mappati in memoria, ecc.).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.