DEIS
- Facoltà di Ingegneria - Università di Bologna
Sistemi Operativi T |
|
Qua si possono trovare risposte a domande frequenti relative a problemi di carattere più o meno pratico
Ma...
Ci sono almeno due debugger installati in laboratorio:
- gdb, debugger per C e C++. Ha una lunga serie di opzioni, fra le quali
set follow-fork-mode [child | parent]
permette di decidere se seguire il processo figlio o il processo padre dopo l'esecuzione di unafork
;- jdb, debugger per JAVA.
Sì, è possibile che alcuni segnali vengano persi. Si può verificare il caso in cui un processo riceve un segnale mentre è già impegnato a gestire un segnale. Non esiste uno standard che dica come si deve comportare il S.O. (dipende quindi dalla versione di Unix, o distribuzione Linux). In laboratorio si è visto che alcuni programmi in cui un figlio mandava una serie di segnali al padre non funzionavano (il padre raccoglieva solo il primo). D'altra parte, il processo (figlio) che manda il segnale non dà errore (il segnale viene inviato correttamente). In questi casi, si può usare un lock con un file per sincronizzarsi con l'handler, oppure (per gli esercizi d'esame) inserire delle sleep prima delle kill, per verificare se l'eventuale malfunzionamento sia dovuto alla perdita di un segnale.
Probabilmente c'è una fork all'interno di un ciclo, e ci si è dimenticati di mettere una exit alla fine delle istruzioni per il processo figlio.
Se si sta utilizzando la printf per visualizzare l'attività dei processi, è possibile che le stringhe in uscita dalla printf non vengano in realtà mandate subito in output, ma che restino nel canale di output in attesa di essere visualizzate. Ci sono varie soluzioni a questo problema:
È possibile che si sia esaurita la quota di disco (8 Mega), tipicamente per via di Netscape, o a causa di file temporanei generati da NFS (.nfsXXXX) in conseguenza di problemi di rete. Questo impedisce di inizializzare l'ambiente grafico. A questo punto si può cancellare la cache di Firefox, o i file .nfs in eccesso, poi provare a rifare login.
CONSIGLIO: limitare la quota di cache di Firefox
gcc -o <nomefile> <filesorgente.c> mi consente di creare un eseguibile chiamato <nomefile> invece che a.out
Si tratta di uno sticky bit per un direttorio. Serve a fare in modo che chiunque possa scrivere nel direttorio (quindi anche creare / eliminare file), però eliminare file solo se si tratta di file di cui si ha la proprietà. Si usa se più utenti vogliono condividere un direttorio comune, ma non vogliono che gli altri utenti eliminino i propri file. Da notare che per la modifica di file non c'è problema, i permessi dei file per default possono essere stabiliti dal proprietario (il problema è impedire che un altro utente scriva in un direttorio cancellando un file che non è suo, ma allo stesso tempo consentire che scriva in un direttorio, aggiungendo un file).