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.
- 1464 megtekintés
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.
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
Ez a pipe szuper megoldásnak tűnik, mert megoldást jelet az esetleges váratlan leállás vagy bármi hasonló ellen, mert akkor ha jól gondolom, nem lehet írni a pipe-ba.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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 hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni