Newsgroup: it.comp.os.linux.development
Titolo: Signal unix da gestire

Progettino ad uso scolastico di programmazione client-server mediante
socket unix.
Domanda 1)
Quali signal vanno rilevate e come vanno gestite?
Tenendo conto che mi interessa una gestione minima-decorosa, non cerco
la completezza e la perfezione.
Io gestisco
  signal(SIGTERM, routine-x);
  signal(SIGINT, routine-x);
sono sufficienti?
Fra l'altro ho poca chiarezza in mente,
-CTRL C, CTRL Z da tastiera hanno lo stesso effetto su tutti i sistemi
linux-unix?
-CTRL Z = Kill -9?
-E` vero che i CTRL Z sono impossibili da gestire e vanno lasciati al
sistema?
Domanda 2)
Essendo il server concorrente singolo-processo, ovvero sotto select e
dovendo essere la gestione delle signal rientrante (cioe` quando il
processo rileva la signal fa certe operazioni ma DEVE rimanere sotto
select per aspettare un messaggio particolare prima di morire) le
soluzioni da me trovate per non avere errori di select sono queste due:
-mettere a 0 i timer della select (che fa sempre polling --> consumo
elevato CPU)
-lasciare a NULL i timer e bypassare la signal sotto select (sembra
buona ma allora mi chiedo, ci sono altre primitive da gestire in questo
modo? accept, read?)
Quale delle due? Esitono altre soluzioni?
Grazie e saluti
--
Giuseppe R.
E-mail: mailto:
giuseppe...@SPAMnetit.alcatel.it
--
Posted from 
ns.alcanet.it
 [194.243.74.35] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

sistema?
Si, guarda signal(7).
-- 
ciao, | [Per rispondere togli "toglimi" dal mio indirizzo.]
Marco | * The Internet is full. Go away.  -- Joel Furr *
      | (Ri)scoprire fidonet: 
http://bbs.mi.linux.it

 Si, guarda signal(7).
ok quindi la domanda diventa: un client o un server stoppati con CTRL Z
assodato che non possono proseguire l'esecuzione cosa possono fare per
limitare al minimo i danni? (Ad esempio per avvisare i processi con cui
sono in comunicazione via socket). 
Saluti e grazie


limitare al minimo i danni? (Ad esempio per avvisare i processi con cui
Non devono fare niente, quando il processo sara` fatto ripartire
continuera` a funzionare.


 sistema?
Prova a far girare questo programmino: 
(0)pern:~/tmp% cat showsig.c
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
void stompa(int num) {
        fprintf(stderr,"Ricevuto segnale num. %d\n", num);
        signal(num, stompa);
        return;
}
int main() {
 
        int i;
 
        for(i=0;i<32;i++) {
                void *ret;
                ret=(void*)signal(i,stompa);
                fprintf(stderr,
                        "Handler per segnale %d %s installato\n", i,
                        (ret!=SIG_ERR) ? "correttamente":" _NON_ ");
        }
 
        fprintf(stderr, "\nPer uccidermi: kill -9 %d\n\n", getpid());
        while(1) sleep(1);
}
(0)pern:~/tmp% gcc -g -Wall showsig.c
(0)pern:~/tmp% ./a.out
[... installa tutto meno 0 (non esiste), 9 e 19 (non puo` ;-)]
Per uccidermi: kill -9 29811
Ricevuto segnale num. 2
Ricevuto segnale num. 20
zsh: 29811 killed     ./a.out
(137)pern:~/tmp%
Il 2 corrisponde a ctrl-c e il 20 a ctrl-z. Io uso zsh, YMMV).
                    Romano
-- 
Romano Giannetti --- Linux dai tempi di 0.99pl8 --- e ora...
Linux 
pern.dea.icai.upco.es
 2.2.15pre17
Change - with . and delete .no.spam from my email address!

SIGSTOP
Se non ricordo male mi sembra SIGTSTP.
-- 
Lorenzo
"Given enough eyeballs, all bugs are shallow", Linus'Law
(address rot13 encoded)