Perché il mio terminale si blocca?


11

A volte quando il mio terminale si blocca e non mi lascia digitare. Non riesco a identificare alcuna causa, né come diagnosticare. Eventuali suggerimenti?

Grazie!

Terminale GNOME 2.30.2 su Ubuntu 10.04


2
di solito quando il terminale si blocca è causato da un'altra applicazione in background che utilizza troppe risorse, come la CPU o l'I / O del disco. Se si esegue topin un terminale, si dovrebbe essere in grado di individuare facilmente il problema.
RolandiXor

@roland - suona come un catch-22, ma un buon consiglio poiché a volte quando un terminale è congelato posso aprirne un altro e funzionerà.
David LeBauer,

Infatti, NO? :) È un po 'un catch-22, ma spesso funziona per me.
RolandiXor

Risposte:


14

Un buon modo generale per diagnosticare blocchi misteriosi:

  1. apri un terminale (nother) e usa ps axo pid,wchan:32,cmdper trovare l'altro ID di processo
  2. nota la wchancolonna, che dovrebbe dirti se è bloccata nel kernel
  3. eseguire sudo strace -p PIDinserendo il pid di quel processo; incollalo in una segnalazione o domanda bug

Se c'è qualcosa a parte un semplice trattino nella colonna wchan, il processo è nel kernel che sta facendo qualcosa. Alcuni valori tipici:

  • futex_wait_queue_me - in attesa di un futex per un altro thread nello stesso processo
  • poll_schedule_timeout - in attesa di comunicazione di rete o tra processi, o semplicemente dormendo per un po '
  • pipe_wait - leggere / scrivere una pipa

Ci sono migliaia di possibilità, quindi non posso elencarle tutte. Vedi Cos'è il "Canale di attesa" di un processo? per più.


Molto utile per il tracciamento di bug per scopi generici. Potete per favore aggiornare la vostra risposta con qualche descrizione estesa? Quale messaggio nella colonna wchan indica un programma bloccato nel kernel?
Salih Emin,

Grazie Salih. Forse dovremmo avere un'altra domanda su come, in generale, diagnosticare i blocchi?
poolie

Se le persone sono curiose di conoscere altri valori di wchan, si prega di aggiungere un commento.
Poolie

Qualsiasi wchanmezzo il processo è in attesa nel kernel. Se rimane lì per molto tempo e senza una buona ragione come ascoltare la rete io, allora è bloccato. ;)
poolie l'

25

Hai premuto Ctrl + S per caso? È il tasto di pausa del terminale che interrompe tutto l'output fino a quando non si preme Ctrl-Q per riprendere.

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.