C Programm unter Linux nur einmal starten

Am einfachsten ist es sicher das eigentliche Programm mittels einen Shellskriptes zu starten und darin die Prozessanzeige "ps" auszuwerten. Angenommen dein Programm heißt "testprogramm":
Code:
#!/bin/sh
if ps a|grep testprogramm;
    then echo "testprogramm laeuft schon";
else echo "testprogramm laeuft nicht, wird gestartet.";
    /home/thomas/testprogramm;
fi
Um das direkt aus dem C-Programm auszuwerden wirds sicherlich mit fork() und exec() etwas aufwändiger.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Lockfile

Ich habe ein C Programm unter Linux und möchte verhindern das es auf einem Rechner mehrfach gestartet wird. Wie geht das am einfachsten?

Die traditionelle Methode ist die Benutzung eines LOCKFILES.
Du legst zuerst den Namen des Lockfiles fest, zB /var/lock/progname.
Beim Aufruf deines Programmes schaust du zuerst, ob es das
Lockfile schon gibt.
Falls ja: Programm läuft schon, Ende.
Falls nein: Erzeuge das Lockfile, und weiter im Programm
Zum Schluss noch Lockfile löschen.


Die Methode von Thomas_v2.1 funktioniert natürlich auch, jedoch muss
dann sichergestellt sein, dass dein Programm nicht noch auf andere Art
aufgerufen wird.

Du hast also die Wahl.
Ciao.
 
Die traditionelle Methode ist die Benutzung eines LOCKFILES.
Du legst zuerst den Namen des Lockfiles fest, zB /var/lock/progname.
Beim Aufruf deines Programmes schaust du zuerst, ob es das
Lockfile schon gibt.
Falls ja: Programm läuft schon, Ende.
Falls nein: Erzeuge das Lockfile, und weiter im Programm
Zum Schluss noch Lockfile löschen.
...


Das kann aber echte Probleme bereiten. Geh mal von einem Stromausfall aus während das Programm läuft.

Dann muss man den Lockfile von Hand löschen.
 
Unter Windows macht man das mit:

Code:
[B]HANDLE CreateMutex(   LPSECURITY_ATTRIBUTES[/B][I] lpMutexAttributes[/I][B],[/B] // pointer to security attributes  [B] 
BOOL[/B][I] bInitialOwner[/I][B],  [/B]// flag for initial ownership  [B] 
LPCTSTR[/B][I] lpName[/I]       // pointer to mutex-object name [B]);[/B]
Das Gegestück zu CreateMutex ist in Linux 'pthreads_mutex_init'.
Ich kann Dir leider keinen Code in Linux anbieten, aber mit Hilfe dieser Funktion
sollte das möglich sein.
Mit Google findet man mit 'pthread_mutex_init process' sehr viel über das Thema.

Servus


Vbxler
 
Zurück
Oben