Devo scrivere un programma che deve essere a conoscenza di un'altra istanza di se stesso in esecuzione su tale macchina e comunicare con esso, quindi morire. Voglio sapere se c'è un modo canonico di farlo in Linux.Come rendere un processo consapevole di altri processi dello stesso programma
Il mio primo pensiero è stato quello di scrivere un file contenente il PID del processo da qualche parte, e cercare quel file ogni volta che il programma viene eseguito, ma dov'è il posto e il nome "giusto" per quel file? C'è un modo migliore, o più "corretto"?
Quindi devo comunicare, dicendo che l'utente ha provato a eseguirlo, ma poiché c'è un'altra istanza, passerà il lavoro e uscirà. Ho pensato di inviare semplicemente un segnale, come SIGUSR1, ma questo non mi avrebbe permesso di inviare più informazioni, come il display X11 da cui l'utente eseguiva il secondo processo. Come inviare queste informazioni?
Il programma è collegato a Gtk, quindi una soluzione che utilizza la glib è OK.
Un file pid da solo è praticamente inutile. Se l'applicazione si blocca, potrebbe non eliminare il suo file pid in modo che debba essere cancellato manualmente. Un'opzione migliore è quella di bloccare il file pid, perché il sistema operativo rilascia sempre il blocco quando il processo termina in qualche modo. Non puoi vedere quel blocco però facendo 'ls -la'. È sufficiente un solo socket di dominio unix. –
@Maxim: False. 'Unlink (...)' cancella il file dopo che il file è stato chiuso. Quindi 'fd = open (path, ...); unlink (path); 'è il solito trucco per avere un file temporaneo. – Alexandru
@Alexandru: Quasi, hai perso il fatto che stavamo discutendo di file pid, non di file temporanei. Il file pid non deve essere rimosso prima che l'applicazione termini. –