Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [C] - Invio di segnali

  1. #1

    [C] - Invio di segnali

    Salve a tutti,
    sto facendo un esercizio per l'universita'e mi trovo in crisi su alcuni punti riguardanti la gestione dei segnali. In seguito ad una serie di fork() tramite l'invio di un segnale devo mettere in pausa per un tempo arbitrario tutti i processi figli attivi al momento per poi farli riprendere il lavoro dove lo avevano sospeso.
    Io avevo pensato di fare cosi': in ogni processo figlio gestisco una pause lanciata in seguito alla gestione di un SIGINT tramite CTRL-C;successivamente nella funzione di gestione del segnale di interrupt chiamo la funzione alarm che mi genera un segnale SIGALRM dopo un tempo prefissato (ogni figlio e' generato da una fork seguita da una execl). In teoria alla ricezione di un qualunque segnale, da quello che ho capito, tutti i processi fermati da una pause dovrebbero riprendere l'esecuzione.
    Potrebbe quadrare come ragionamento?
    Il mio interrogativo ora e'il seguente:
    quando lancio un segnale (kill, raise, o quantáltro....) questo segnale verra' ricevuto da tutti i processi, solo dai processi della stessa famiglia o solo dal processo che lo ha generato? Mi chiedevo appunto, nel caso in cui la mia implementazione andasse bene, se si potesse all'interno dei figli gestire l'interrupt per mettere in pausa il processo, mentre allínterno del padre lo stesso segnale di interrupt gestirlo per lanciare l'alarm sperando che questo venga poi ricevuto da tutti i figli in pause.

    Dato che sto facendo un po'di confusione nello studiare questi argomenti mi chiedevo se ero sulla strada giusta o stavo gia' sbagliando tutto.

    Grazie,

    Fabio

  2. #2

  3. #3
    grazie moltissimo, avevo già visto il GaPil ma mi era sfuggita quella pagina su kill e raise; direi che killpg può fare al caso mio per indirizzare un segnale a tutto un gruppo. Non mi è ancora chiaro come fare da tastiera a mettere in pausa a partire da un processo padre tutti i processi figli per poi farli ripartire in automatico dopo un lasso di tempo.
    Nel codice del processo padre metto un gestore per un SIGSTP (inviato da tastiera), e nel metodo attivato dal segnale lanciare (all'interno del codice del processo padre) una alarm(totsecondi). All'interno del codice dei figli metterei un gestore per SIGSTP che attiva un metodo che contiene una sigpause(SIGALRM).
    Quello che non riuscivo a capire è se io lancio un sigstp dal processo padre questo viene ricevuto da se stesso e dai suoi figlie pertanto posso gestirlo in maniera differente. Allo stesso modo se nel padre lancio una alarm che a sua volta lancia un sigalrm questo segnale verra ricevuto dai figli che all'interno del loro codice hanno l'opportuno gestore?

    Grazie,

    Fabio

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.