futás ellenőrzés

Fórumok

Hogy tudnám azt c-ben magvalósítani, hogy ellenőrizzem azt, hogy a program egy példánya fut e már.
Azaz van e arra valamilyen szép megoldás, hogy megkérdezzem, hogy fut e már.

Hozzászólások

Például:

Meg lehet grep-pelni a /proc könyvtárat, vagy a program
létrehoz egy fájlt, amit befejezéskor letöröl. (Ez utóbbi
esetben kalkulálni kell azzal, hogy szabálytalan kilépés
esetén, ottragad a fájl.)

> Sol omnibus lucet.

Eleg sok programban, foleg daemonokban, megtalalhato ez a viselkedes. Tipikusan ugy mukodik, hogy indulaskor elhelyeznek egy irasra lockolt filet a /var/run/ -ban. Ebbe bele lehet irni a sajat PID-et vagy mas informaciot (port, pipe stb.), es akkor meg kommunikalni is tudsz a mar futo peldannyal.

--
The Net is indeed vast and infinite...
http://gablog.eu

Egy elo"re megadott (/var/run alatt, vagy barmi fix helyen levo", programba beledrotozott) file-t letrehozol open()-nel, O_CREAT|O_EXCL flag-ek mellett. Ha nem sikerul letrehozni (open hibaval ter vissza), akkor a program ma'r fut, ha sikerul, akkor jo. Futas utan persze ezt a file-t le kell torolni. Igy nem lesz semmifele race condition.

A file-ba ezutan persze lehet mindenfele hasznos dolgokat irni (pl pid, egyedileg letrehozott socket/port, stb), ahogy fentebb is irta'k.

A.

Meg lehet nezni, hogy a ps/pidof programok hogy dolgoznak, de szerintem ok is a /proc mappaba levo numerikus mappakat nyaljak vegig.
a /proc/${pid}/exe nevu symlink azt a fajlt linkeli, ami eppen fut. Broken vagy sem, de readlink-el gyonyoruen ki lehet olvasni. Es az atoi tud segiteni a numerikussag ellenorzeseben (ugye 0-s pid nem er).
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

A System V IPC alkalmazasa is megfelelő lehet, így akár adatot is át lehet küldeni a már futó példánynak. Például a firefox esetén, ahol a "firefox " parancs átadja a címet a már futó példánynak és kilép.

Bővebben:
http://tldp.org/LDP/lpg/node21.html