Portál AbcLinuxu, 4. května 2025 15:43
Více méně to nejde 100% vyřešit.Cesta k binárce (
/proc/*/exe
) je přece jedinečná*. Případně si aplikace může zamykat nějaký soubor, naslouchat na TCP portu, vytvořit si unixový soket, uložit PID do souboru atd.
*) alespoň pokud ji nesmažeš, nenahraješ na stejné místo jinou a opět nesmažeš – pak už se to rozlišuje blbě. Leda si pak vytáhnout její obsah a spočítat třeba hash Může, jak si zmínil výše, /proc/self/exe je jen symlink na spustitelný soubor, který už pak ale nemusí být platný, nebo vám bude ukazovat na úplně jinou binárku a může to být zneužitelné, podle typu aplikace.Ten
/proc/self/exe
není obyčejný odkaz – můžeš si z něj vykopírovat původní binárku, i když už ten soubor byl smazaný.
cp /bin/bash BASH; echo omg >> BASH; sha512sum BASH; chmod +x BASH; ./BASH -c "rm BASH || ls -l BASH && dd < /proc/self/exe > Bash && echo ok"; sha512sum Bash;A pokud se snažíme, aby uživatel spustil jen jednu instanci „programu“ – jak lépe definovat „program“ než posloupností jeho bajtů nebo jeho hashem? Tohle mi přijde jednoznačné a 100% dostatečně
Místo řešení s /proc bych se ale přiklonil ke GApplication/GtkApplication, když už se to Gtk v aplikaci stejně používá.Souhlas, tohle je typická úloha, kterou by měl řešit framework a ne aby si ji musel psát každý sám.
Ale asi to nemá smysl řešit, pokud si to uživatel, či nějaký administrátor dokáže ohlídat a nastavit.To nemá a ani to nejde – v krajním případě může uživatel použít virtualizaci nebo víc počítačů a ten program si víckrát prostě spustí, nemá cenu mu v tom bránit – naopak, má to být pomůcka pro uživatele, aby se mu nespouštělo zbytečně víc instancí programu, když stačí např. otevřít okno v již existující instanci. Ale pokud uživatel chce, tak by mu program neměl ve spuštění více instancí bránit. Pokud bych tohle měl řešit sám, tak bych asi dal jako parametr programu něco (cesta k souboru, TCP port, klíč v nějaké jmenné hierarchii…), co identifikuje instanci – uživatel by to spouštěl (např. z nabídky desktopového prostředí nebo ze shell skriptu) vždy s tímto parametrem, ale pokud by chtěl, tak by si ručně spustil druhou instanci s jiným parametrem.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.