Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: API124 27 Června 2012, 18:29:39

Název: spouštění programu na pozadí - c++
Přispěvatel: API124 27 Června 2012, 18:29:39
Dobrý den,
chtěl bych se dotázat, jak naprogramovat, aby se  program hnen při startu spustil na pozadí a tam běžel a pak si ho mohl uživatel zavolat a program se okamžitě spustí na popředí.
programuji v c++.
děkuji za všechny odpovědi předem i zadem...
Název: Re:spouštění programu na pozadí - c++
Přispěvatel: Citrisin 27 Června 2012, 19:56:12
Pro spuštění po startu stačí přidat spouštěcí příkaz vaší aplikace do /etc/rc.local na řádky před "exit 0" tuším. Buďto při prvním spuštění, nebo při konfiguraci.
Jinak spuštěním do popředí máte na mysli asi vytvoření nového okna. Já bych to udělal asi takto: Aplikaci bych rozdělil na samotnou aplikaci a jen její spouštěč. Spouštěč bude spouštět uživatel. Ten před d-bus kontaktuje v té době již běžící aplikaci a ta vytvoří okno. Případně pokud se kontakt nepovede, pokusí se spustit samotnou aplikaci a opakuje, pokud se znovu nezdaří, vypíše error. Aplikace by si ještě mohla kontrolovat zdali se jedná o jedinou její instanci.
Doufám že pomůže jako nápad. Přesná formulace zdrojových kódu už by neměla být problémem.
Jinak tak mimo, takovou aplikaci bych asi moc nepoužíval, zpomalila by mi start systému a vůbec by ho zbytečně zatěžovala i kdybych ji nepotřeboval. Opravdu je to nutné řešení. Nebylo by lepší spustit hlavní aplikaci až ve chvíli kdy je opravdu vyžádána a ne se startem systému?
Název: Re:spouštění programu na pozadí - c++
Přispěvatel: API124 27 Června 2012, 20:37:20
za nápad velice děkuji, ale já myslel jakou funkcí udělat, aby spouštěč neměl vlastní okno, ale byl v pozadí?
Název: Re:spouštění programu na pozadí - c++
Přispěvatel: Citrisin 27 Června 2012, 20:43:02
za nápad velice děkuji, ale já myslel jakou funkcí udělat, aby spouštěč neměl vlastní okno, ale byl v pozadí?
Ehm obávám se že vás nechápu. Tak pokud nechci okno tak ho nevytvořím. A v mém nápadu jako takovém se spouštěč jen spustí, kontaktuje samotnou aplikaci a ukončí se.
Název: Re:spouštění programu na pozadí - c++
Přispěvatel: Šuohob 27 Června 2012, 20:52:42
asi neni nejlepsi napad to davat do /etc/rc.local, spis bych to dal do seznamu aplikaci, ktere se spusti se startem prostredi.
Duvodu je vic - aplikace bude bezet se "spravnymi" pravy a bude se spoustet pouze tobe, kdyz se prihlasis
Název: Re:spouštění programu na pozadí - c++
Přispěvatel: API124 27 Června 2012, 21:04:25
počkat, když si spustím aplikaci přes  terminál, tak když terminál vypnu, tak aplikace zůstane běžet ¿
já jsem totiž na ubuntu nový, tak ještě nevím jak to funguje
Název: Re:spouštění programu na pozadí - c++
Přispěvatel: Šuohob 27 Června 2012, 21:32:45
počkat, když si spustím aplikaci přes  terminál, tak když terminál vypnu, tak aplikace zůstane běžet ¿
já jsem totiž na ubuntu nový, tak ještě nevím jak to funguje

na to musis pouzit prikaz nohup (viz man nohup) - ovsem ma to jeden hacek, nejsem si jisty, jestli se app ukonci, kdyz se odhlasis (nezkousel jsem)

pokud aplikaci budes spoustet automaticky ihned po prihlaseni (ubuntu ma nekde nastaveni jake apps se maji spoustet po prihlaseni), tak nohup pouzit nemusis, protoze ta aplikace se ti spusti jako daemon (to jsi asi myslel tim "na pozadi", ze?)
Název: Re:spouštění programu na pozadí - c++
Přispěvatel: GdH 27 Června 2012, 21:43:20
Pokud spustíš okno emulátoru terminálu s BASHem, v GNOME typicky gnome-terminal a spustíš v něm aplikaci (jejíž spouštěč neřeší závislost na předkovi), tak tato zanikne se zavřením okna onoho terminálu jako jeho potomek, i když ho necháš spustit na pozadí příkazem &. Pokud chceš spustit z terminálu nezávislý proces, můžeš použít příkaz nohup (jak psal Bohouš). Pokud ale spustíš binární aplikaci po přihlášení, nebo desktopovým spouštěčem nespustí se v samostatném shellu (natož okně emulátoru terminálu, i když i to se dá definovat), ale přímo, tudíž není co řešit. Zrovna tak, když spustíš nějaký proces přes Alt+F2 - není to klasický shell.
Název: Re:spouštění programu na pozadí - c++
Přispěvatel: API124 28 Června 2012, 13:57:11
zadal jsem toto:
nohup ./a.out
a ono to odpovědělo:
nohup: vstup ignoruji a výstup připojuji k „nohup.out“
tak jsem chtěl ukončit terminál, ale ono to řeklo, že když vypnu terminál, tak se to vypne.
Název: Re:spouštění programu na pozadí - c++
Přispěvatel: petergula 28 Června 2012, 14:49:38
zadal jsem toto:
nohup ./a.out
a ono to odpovědělo:
nohup: vstup ignoruji a výstup připojuji k „nohup.out“
tak jsem chtěl ukončit terminál, ale ono to řeklo, že když vypnu terminál, tak se to vypne.
Preto to musis pustit cez
Kód: [Vybrat]
nohup ./a.out &
aby sa to pustilo na pozadi, ako Ti uz radili, alebo pouzit komplexnejsi prikaz screen miesto nohup.
Název: Re:spouštění programu na pozadí - c++
Přispěvatel: API124 28 Června 2012, 16:18:22
bezva, už to výborně funguje, děkuji za všechny rady