PDA

View Full Version : Gestione di SIGTERM e SIGINT per terminazione "gentile" di un server multithreaded.


galele87
14-06-2010, 18:29
Salve a tutti quanti...
chiedo un parere/consiglio/aiuto a qualche anima buona che sappia aiutarmi a gestire al meglio la situazione accennata nel titolo.
Sto programmando in C e sto, appunto, creando un server multithreaded i cui thread worker vengono creati ad ogni connessione in ingresso e ciascuno destinato a gestire ogni client, fino alla loro disconnessione oppure fino alla terminazione del server.
In quest'ultimo caso, appunto, devo poter gestire segnali di SIGINT o SIGTERM inviati al processo: deve essere una terminazione "gentile" nel senso che tutti i thread worker devono poter gestire richieste pendenti dai client, prima di terminare. Ecco... non riesco a pianificare una buona strategia per implementare tutto ciò.
Non so se creare un thread handler dove attendere i segnali con una sigwait().. non capisco se alla ricezione dei segnali devo comunque inviare un'interruzione a ciascun worker con una pthread_kill()... se devo poi attenderli con la pthread_join() o non è necessario... insomma, sono un pò confuso..

Qualche goog boy sa darmi dei consigli risolutivi?

Grazie in anticipo a chi mi saprà rispondere.
Gabriele

IceCoder
15-06-2010, 11:04
Penso che questo faccia al caso tuo:

http://www.cons.org/cracauer/sigint.html

Appena trappi il sigint/sigterm, joina i thread e poi killa il processo.

Se guardi il link che ti ho indicato noterai che all'inizio parla di shell.. scorri in basso e troverai le operazioni C.