Hvordan afgøres om applikationen allerede kører? C bærbar Linux/Win

Indlæg af Hanne Mølgaard Plasc

Problem



Er der mulighed for at skrive en C-kode, der giver os mulighed for at afgøre, om en tidligere forekomst af en applikation allerede kører? Jeg skal tjekke dette på en bærbar måde til Linux og Windows, begge med den sidste version af GCC tilgængelig.


Nogle eksempler på bærbar kode ville være af stor hjælp. Jeg kan se to muligheder nu:



  1. Kontroller procesliste. Her har linux gode værktøjer, men jeg tror ikke de samme funktioner gælder for windows. Måske nogle gnu-biblioteker til både SO? Hvilke biblioteker eller funktioner?

  2. Gem og lås en fil. Nu, hvordan gør man det på en måde, som begge systemer kan forstå? Et problem er, hvor skal filen gemmes? Sti træer er forskellige fra hver system. Hvis en relativ sti er valgt, kan to applikationer stadig køre med forskellige låste filer i forskellige mapper.



Tak!
Beco.


PS. SO'en har forskellige forudsætninger, så hvis du kender den ene og den anden, bedes du svare. Når alt kommer til alt, hvis der ikke er nogen bærbar 'enkelt' måde, kan jeg stadig bruge #ifdef og de foreslåede koder som svar.


C sprog (ikke c ++), konsolprogram, gcc, linux og windows

Bedste reference


Desværre, hvis du begrænser dig til C, har du måske svært ved at gøre dette portabelt. Med C ++, er der en boost interprocess 'named\_mutex, men på C skal du enten: [2]



  • UNIXes (herunder Mac OS): Åbn og flock en fil et eller andet sted. Traditionelt vil du også skrive din nuværende PID i denne fil. BEMÆRK: Dette er muligvis ikke sikkert på NFS; men dine muligheder er yderst begrænsede der alligevel. På Linux kan du bruge en /dev/shm sti, hvis du vil sikre, at den er lokal og sikker at låse.

  • Windows: Åbn og lås en navngivet mutex


Andre referencer 1


for windows fungerer en mutex godt. [3] [4]


http://msdn.microsoft.com/en-us/library/ms682411(v=vs.85).aspx[5]


artiklen nævner også et alternativ til en mutex ....


For at begrænse din ansøgning til en forekomst pr. Bruger skal du oprette en låst fil i brugerens profilmappe.

Andre referencer 2


Den slags kanoniske metode i Unixland er at få processen til at skrive sin egen PID til en fil på et kendt sted. Hvis denne fil eksisterer, kan programmet kontrollere sin egen pid (tilgængelig ved systemopkald) med den i den pågældende fil, og hvis den ikke er kendt, ved du, at en anden proces kører.

Andre referencer 3


C giver ikke indbyggede faciliteter til at kontrollere, om en applikation allerede kører, så det er svært/umuligt at gøre det på tværs af platformen. Men på Linux kan man bruge IPC. Og på Windows (jeg er ikke meget erfaren i denne kategori), kan du finde det nyttigt. [6] [7]