Newsgroup: it.comp.os.linux.debian
Titolo: processi che si bloccano e non si risvegliano

Salve. Premetto che non ho una grande conoscenza dei processi UNIX, per 
questo vorrei chiedere il vostro parere su questo inconveniente.
Ho un disco NTFS (ahimè) contenente mp3 e un altro disco sempre NTFS 
contenente film. Spesso mi capita che cercando di ascoltare un mp3 o di 
guardare un film il lettore si blocca. Allora io chiudo la finestra con 
CTRL+ALT+ESC, vado a vedere nella lista dei processi e noto che il 
processo del lettore è finito nello stato D, che se non sbaglio 
significa che sta aspettando qualcosa da parte di una periferica 
hardware (hard disk? scheda audio?). Questo mi capita con diversi 
lettori (amaroK, Noatun, XMMS per gli mp3 e xine per i film); l'unico 
che sembra non presentare questo problema con gli mp3 è il misero Kaboodle.
Esempio di processi "addormentati":
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 D  1000  2879     1  0  82   0 - 26634 lock_p ?        00:07:49 artsd
0 D  1000 15585     1  0  85   0 - 42590 lock_p ?        00:00:00 xine
In questo caso avevo provato a vedere un film e si è bloccato 
addirittura artsd.
Ora io dal basso della mia ignoranza credo che questi processi ricevano 
un segnale di tipo wait, per sbaglio, e naturalmente non si risvegliano 
più. Io non posso ucciderli in alcun modo, kill non ha effetto. Mi hanno 
detto di guardare con strace cosa succede ma francamente non ci ho 
capito molto.
Avete qualche idea sul perchè succeda questo spiacevole fatto, o almeno 
come fare per ucciderli così da poterli avviare nuovamente?
-- 
sunchild(at)sunchild(dot)name
Linux Debian 2.6.8-2-k7

 per questo vorrei chiedere il vostro parere su questo inconveniente.
  Mi accodo, aggiungendo che ne so ancora meno di sunchild:
  Come cappero faccio  a sapere se un processo si  e` "impiantato"? La
cosa mi e`  capitata giusto oggi, usando slrn. Non  mi dava ovviamente
nessun  feedback, e  `top' non  mi visualizzava  nulla di  anormale, a
parte l'utilizzo massivo della cpu da  parte di slrn. In effetti, dopo
qualcosa  come  dieci minuti,  slrn  ha  ripreso a  funzionare.  Pero`
non  c'era  nessun processo  in  background  (e, ovviamente,  non  ero
assolutamente collegato a Internet...)
  Voglio dire,  dopo dieci minuti  di inattivita`  a uno viene  un po'
voglia di fare un "kill -9", capite?
  Qual e` (sempre  ammesso che esista) il "criterio" per  capire se un
prog e` in "stallo"?
  Non so se mi sono capito... ;)
-- 
Cio` che ho scritto, ho scritto.

 
Salvo casi particolari, temo che in generale il problema sia indecidibile.
Alessandro.

 Ho un disco NTFS (ahimč) contenente mp3 e un altro disco sempre NTFS
Ho il sospetto che il problema possa essere proprio nel filesystem
usato. Ti consiglierei di usare partizioni VFAT per montarle in
lettura/scrittura da entrambi i sistemi.
Per quanto riguarda strace: prova a lanciare
strace -o /tmp/strace.log xine /file/che/si/pianta.avi
questo salvera' nel file /tmp/strace.log le chiamate del
programma. Non sara' di facile interpretazione, ma a volte e' utile
.a.
-- 
Il mattino ha l'oro in bocca. Il MATTino ha l'OrO In bOcca.
i lma tt ino ha l'o roin bocc a.ilmattinohal'oroinbocca. il ma tt in
oh al' or oi nb oc ca. il matti noha l'oroinbocca. IL MATtiNO Ha l'ORO
InBOCCa. I l m a t t i n o  h a l' o r o i n b o c c a . ilmattinohal'oroin
BoCcA. iLmAtTiNoHaL'oRoInBoCcA.

   Come cappero faccio  a sapere se un processo si  e` "impiantato"? La
Io solitamente adotto questa politica: 1) aspetta qualche minuto. 2)
se il processo sta usando la cpu, aspetta qualche minuto. 3) se il
processo non usa la cpu, vuol dire che non sta facendo nulla quindi
che si tolga dalle balle: uccidilo (se ci riesci) 4) se ti sei rotto,
uccidi il processo. :-)


 che si tolga dalle balle
A volte e' solo in attesa di input ma non sai che cosa voglia :-)
Alessandro.

 uccidi il processo. :-)
E se non puoi ucciderlo? ;(


 lettura/scrittura da entrambi i sistemi.
Sģ, č quello che intendo fare. Dovrņ spostare 80+120 GB di dati da 
qualche parte per potere formattare quei dischi in FAT32; sto solo 
aspettando di trovare quel "qualche parte".


 E se non puoi ucciderlo? ;(
Se non consuma cpu, che me frega? Se consuma cpu si puo' quasi sempre
uccidere. Di solito non si possono uccidere processi che sono in
attesa di qualcosa, e quindi che non fanno nulla.


 E se non puoi ucciderlo? ;(
Chiamo l'esorcista.


 
Già, non consuma CPU ma non può creare un altro processo dello stesso 
programma, quindi reboot tutte le volte. E' un metodo troppo 
windows-style, ci deve essere un modo più intelligente :)


 32 processes: 31 sleeping, 1 running, 0 zombie, 0 stopped
  Che sono allora gli `zombie'? E gli `stopped'?
  E non farmi la battutina, eh? :DDD


 aspettando di trovare quel "qualche parte".
  Aspe`: immagino  ci sia  anche Windows,  su almeno  uno di  quei due
hd... o sbaglio? Perche' PartitionMagic ti consente di trasformare una
partizione NTFS  in FAT32 senza  dover riformattare. Ci mette  un po',
pero`, piuttosto che nulla...
  Si`, lo so che l'idea puo` fare un po' paura... ;) Io cmq l'ho fatto
una volta (incrociando le dita) con  PMagic 8, e non ho avuto problemi
(era NTFS di Win2000).


 Io solitamente adotto questa politica:
  Si`, piu` o meno e` quel  che faccio anche io (fortunatamente non mi
càpita quasi  mai...). Speravo  in qualcosa di  piu`... `scientifico',
ecco ;)



zombie e' un processo che e' terminato ed e' in attesa che il processo padre 
ne prenda atto.
stopped e' un processo la cui esecuzione e' stata sospesa dall'esterno per 
essere ripresa in seguito.
Vedi anche "man signal" o 
http://a2.swlibero.org/a277.html#almltitle769
Alessandro.

 pero`, piuttosto che nulla...
Sì, conosco quella funzionalità di PM, comunque non ho un sistema 
windows installato da nessuna parte, e non voglio installarlo :)
I due dischi NTFS sono adibiti solo ad archiviazione, hanno tale 
filesystem perchè li creai anni fa con windows. Poi c'è un 40 GB con 
linux e una FAT32, infine un 200 GB tutto in ext3, sempre per archiviazione.
Spero vivamente di risolvere il problema passando da NTFS a FAT32, 
altrimenti non saprei dove mettere le mani :(
PS: ho letto che FAT32 è assai poco affidabile per quanto riguarda la 
salvaguardia dei dati memorizzati... confermate?


 windows installato da nessuna parte, e non voglio installarlo :)
Allora passa direttamente a reiser o ext3 no? Fat oltretutto ha un
fastidioso limite sulla dimensione max dei file.


   Che sono allora gli `zombie'? E gli `stopped'?
Un processo zombie e' un processo di cui resta soltanto la struttura
relativa, ma nessuna area di codice etc... questo succede perche'
quando un processo chiama una fork, il padre puo' sapere quando il
processo e' uscito e leggerne lo stato di uscita.
ad esempio il seguente codice genera un processo zombie:
main(){
  if(fork()){
    puts("sono il padre");
    while(1)
      sleep(5);
  }else{
    puts("sono il figlio ed esco");
    exit(0);
  }
}
per leggere lo stato di uscita di un processo figlio si puo'  usare
wait|waitpid. se dopo sleep(5) metti un wait(NULL) ad esempio vedrai
che dopo 5 secondi il processo zombie scomparira'.
Su questo sono preparato perche' mi sono sempre garbati gli
zombie. Peccato che adesso il ps li mostra come <defunct> :-(
