La soluzione migliore potrebbe essere quella di mantenere tutti i processi inconsapevoli l'uno dell'altro e utilizzare un processo watchdog / supervisione separato per monitorarli e riavviare automaticamente quelli che vanno giù. Esempi sono Supervisor o perp .
Se vuoi che si comporti esattamente come dici tu, puoi fare in modo che ogni processo memorizzi il pid nel database (o in un file), o inviare un heartbeat periodicamente (memorizzando il tempo dell'ultima attività nel database o toccando un file su disco). La tabella / file contiene anche il process_flag. Quindi, tra un processo e l'altro, gli altri processi potrebbero controllarlo e vedere se uno qualsiasi dei pid non è più in esecuzione processi o se l'heartbeat non è stato aggiornato in un istante. Quindi potevano "rivendicare" quel process_flag e aggiornare la riga / file atomicamente.
Ma ... se fai tutto ciò che stai facendo in pratica ogni processo monitora un processo. Quindi, per semplificare, potresti dividere quel codice di monitoraggio in un processo separato. Ma in sostanza hai scritto una sostituzione per uno degli strumenti esistenti che avresti potuto usare.
Una preoccupazione che le persone hanno sull'utilizzo di un watchdog è cosa fare se si blocca da solo. Una soluzione è avere un cron che lo avvii periodicamente se non è più in esecuzione.