Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: spouštění programu na pozadí - c++  (Přečteno 4205 krát)

API124

  • Host
spouštění programu na pozadí - c++
« kdy: 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...

Citrisin

  • Aktivní člen
  • *
  • Příspěvků: 138
Re:spouštění programu na pozadí - c++
« Odpověď #1 kdy: 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?
†Asus M51Va
*Lenovo Ideapad Y580, intel i5 Ivi bridge, Nvidia GTX660, 8GB ram, 32GB ssd (Samsung), 1TB hdd.
Ubuntu 12.10, Gnome shell.

API124

  • Host
Re:spouštění programu na pozadí - c++
« Odpověď #2 kdy: 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í?

Citrisin

  • Aktivní člen
  • *
  • Příspěvků: 138
Re:spouštění programu na pozadí - c++
« Odpověď #3 kdy: 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.
†Asus M51Va
*Lenovo Ideapad Y580, intel i5 Ivi bridge, Nvidia GTX660, 8GB ram, 32GB ssd (Samsung), 1TB hdd.
Ubuntu 12.10, Gnome shell.

Šuohob

  • Závislák
  • ***
  • Příspěvků: 2171
Re:spouštění programu na pozadí - c++
« Odpověď #4 kdy: 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
Tak dlouho se vrzá s Acerem, až se displej utrhne.

API124

  • Host
Re:spouštění programu na pozadí - c++
« Odpověď #5 kdy: 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

Šuohob

  • Závislák
  • ***
  • Příspěvků: 2171
Re:spouštění programu na pozadí - c++
« Odpověď #6 kdy: 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?)
Tak dlouho se vrzá s Acerem, až se displej utrhne.

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3176
    • GdH-Notes
Re:spouštění programu na pozadí - c++
« Odpověď #7 kdy: 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.

API124

  • Host
Re:spouštění programu na pozadí - c++
« Odpověď #8 kdy: 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.

petergula

  • Stálý člen
  • **
  • Příspěvků: 1016
Re:spouštění programu na pozadí - c++
« Odpověď #9 kdy: 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.
ntbk Dell 6420 (Amd Ati, Intel i7, 4GB RAM, 256GB SSD ...)
secondary/u svokrovcov:
Xubuntu (64bit) ntbk Asus A6Je (Ati X1450, Intel Core2Duo T5500, 2.5GB RAM ...)

API124

  • Host
Re:spouštění programu na pozadí - c++
« Odpověď #10 kdy: 28 Června 2012, 16:18:22 »
bezva, už to výborně funguje, děkuji za všechny rady

 

Provoz zaštiťuje spolek OpenAlt.