Io avevo avuto un problema simile, ma sotto windows: avevo un'applicazione le cui varie istanze dovevano comunicare tra loro mediante named-pipe, più precisamente ci doveva essere un solo server e molti client che si connettevano tutti a lui e lui doveva gestire ogni client co un thread separato. Ora all'avvio di ogni istanza l'utente poteva decidere se l'istanza doveva essere un client o un server, se l'utente sceglieva client ok, l'istanza rimaneva in ogni caso, se sceglieva server dovevo controllare che non ci fosse già un server attivo e nel caso terminare l'istanza corrente. Il problema era come fare a capire se il server c'era già? Semplice controllavo se la pipe era già occupata in scrittura o no. Tu anche se non hai bisogno di sfruttare le pipe per altro potresti sempre usarle per capire se già un'istanza della tua app è attiva. Oppure potresti agire su un file o su una variabile d'ambiente, insomma su qualsiasi cosa che ti consenta di impostare un flag sul sistema in grado di sopravvivere tra un'esecuzione e l'altra della tua app