Ho due sistemi Linux che comunicano su socket (desktop e scheda di sviluppo basata su ARM).
Voglio riavviare (o ripristinare) la mia applicazione client (in esecuzione su una scheda di sviluppo) quando il server invia un particolare messaggio predefinito. Non voglio riavviare (riavviare) Linux, voglio solo che l'applicazione client si riavvii automaticamente.
Non riesco a capire come dovrebbe essere fatto.
Risposta accettata:
Il modo normale per farlo è lasciare che il tuo programma esca e utilizzare un sistema di monitoraggio per riavviarlo. Il init
programma offre un tale sistema di monitoraggio. Esistono molti programmi init diversi (SysVinit, BusyBox, Systemd, ecc.), con meccanismi di configurazione completamente diversi (scrivendo sempre un file di configurazione, ma la posizione e la sintassi del file differiscono), quindi cercate la documentazione di quello che avete stai usando. Configura init per avviare il tuo programma all'avvio o su richiesta esplicita e per riavviarlo se muore. Esistono anche programmi di monitoraggio più elaborati ma non sembra che tu ne abbia bisogno. Questo approccio ha molti vantaggi rispetto al fatto che il programma esegua il riavvio da solo:è standard, quindi puoi riavviare un sacco di servizi senza doversi preoccupare di come sono realizzati; funziona anche se il programma muore a causa di un bug.
Esiste un meccanismo standard per dire a un processo di uscire:i segnali. Invia al tuo programma un segnale TERM. Se il tuo programma ha bisogno di eseguire una pulizia, scrivi un gestore di segnale. Ciò non impedisce di avere un comando specifico del programma per spegnerlo se hai un canale amministrativo per inviargli comandi come questo.