[ stanoje @ 25.07.2001. 10:45 ] @
Interesuje me kako pod Linuxom mogu da ostavim neki program(proces)
da se izvrsava u pozadini. tj startujem ga i izlogujem se a malisa nastavi da
radi bez da bidne ubiven. Cronovi mi ne cine prolece jer proces mora da bude stalno aktivan iza. Moze primer u perlu ili C/C++ ako je to do programiranja stvar ili se moze sistemski nesto uraditi. (Kao ono iz doba dosa - exit and stay resident) i sl.
Pozdrav
[ Vojislav Milunovic @ 25.07.2001. 10:53 ] @
Stratuj ga samo u pozadini sa : & i to resava problem.Pa se loguj/izloguj koliko oces on ce da sljaka dok ne zavrsi
[ m r v a @ 25.07.2001. 11:03 ] @
hm, predo, ne bih rekao da ce svi programi da nastave da rade ukoliko se konzola zatvori ....
l;(
[ Vojislav Milunovic @ 25.07.2001. 11:39 ] @
Ako su im stdin/stdout vezani za konzolu onda ce da se zatvore ;o) Zato se uvek za demone ali uvek uradi ovako nesto na pocetku samog koda :

Code:

int i,fd = sysconf(_SC_OPEN_MAX);
for (i=0;i <= fd ; i++)
  close(i);

Pa onda uradis jedan fork() da se odovjis od parenta pa onda setsid() i voila postajes daemon ;o)
[ m r v a @ 25.07.2001. 13:56 ] @
l;)
lepo ...

to je ok kad pises sam svoj program, nego kako naterati neki vec postojeci prog da ostane u bg-u i posle zatvaranja konzole ?
[ Vojislav Milunovic @ 25.07.2001. 15:50 ] @
pa ako stdin nije vezan za terminal(konzolu) onda slobodno on moze da pici u pozadini.
[ stanoje @ 27.07.2001. 12:53 ] @
Citat:
predator je napisao:
Ako su im stdin/stdout vezani za konzolu onda ce da se zatvore ;o) Zato se uvek za demone ali uvek uradi ovako nesto na pocetku samog koda :

Code:

int i,fd = sysconf(_SC_OPEN_MAX);
for (i=0;i <= fd ; i++)
  close(i);

Pa onda uradis jedan fork() da se odovjis od parenta pa onda setsid() i voila postajes daemon ;o)


ok samo mi molim te objasni kako taj rad sa forkom i setsidom jer sam na to
vec natrcavao ali mi bas nije jasno.
moze i ono kako da se otcepim od konzole tj malo detaljnije ako nije problem :)
[ Vojislav Milunovic @ 27.07.2001. 13:53 ] @
fork() pravi dva procesa od jednog a setsid() sluzi da se proces otcepi od terminala i postavi za vodju grupe procesa (da bude glavni baja).

fork() funkcija znaci od parenta (jednog procesa) napravi parent/children koji rade isto samo su povrante vrednosti od fork() razlicite (u parentu je to pid detea a u deteu je to 0 pa se tako zna koji je koji proces)
[ MoHicAn @ 05.08.2001. 23:48 ] @
Cek
a sto ondak nebi mogao exec() da se koristi ???
posto sa forko() npravis identicni proces itd itd i onda kad se izlogujes parent umire a child je postao samostalan i ostao da radi !!!

e sto nebi tu koristio exec() on automatski ubija parenta i stvara novi samostalni proces !!!
[ random @ 09.08.2001. 23:50 ] @
Rešenje je nohup(1).
[ UroS @ 09.08.2001. 23:59 ] @
najjednostanije je skinuti screen sa www.linux.org

em sto ti ostane u pozadini mozes lepo da se vratis na to i sl.

nego da se cimas sa nekim glupostima...
[ random @ 10.08.2001. 00:00 ] @
Mohican: exec() ne stvara novi samostalni proces, ve� zamenjuje kontekst pozivaju�eg procesa novim programom sa diska.

Ajd jo� malo da pojasnim ovo sa nohup(1)... Kad startujete bilo koji proces iz shella, njemu je shell roditelj i na neki na�in je vezan za njega, u smislu da �e prilikom ubijanja shella, sva njegova deca dobiti signal 1 (HUP)... To dolazi tradicionalno od toga �to se na stare unix sisteme �esto ka�ilo preko serijskog terminala (modem, etc.), pa kad proces izgubi vezu sa kontroli�u�im tty, to naj�e��e zna�i da se fizi�ki prekinula veza (hangup). Daklem, ako ho�e� da ti komanda ostane aktivna i pri izlasku iz �ela, kuca�

Code:

$ nohup komanda
nohup: appending output to `nohup.out'


Output ne ide na tty, ve� po defaultu u fajl nohup.out. Mo�e se i koristiti redirekcija u proizvoljni fajl. nohup �e novostartovani proces u�initi detetom inita, tako da �e biti imun na sve �to se de�ava sa shellom iz koga je startovan...
[ random @ 10.08.2001. 00:06 ] @
Citat:
UroS je napisao:
najjednostanije je skinuti screen sa www.linux.org

em sto ti ostane u pozadini mozes lepo da se vratis na to i sl.

nego da se cimas sa nekim glupostima...


Nisi u pravu. Screen svakako ima svoje primene, ali niti je jednostavniji za korišćenje, niti je standard, niti je zgodan za korišćenje u xtermu, gde se nohup u principu i najčešće kuca...

Pored toga, homepage screena je, ako se dobro sećam, http://www.gnu.org/software/screen/.
[ random @ 10.08.2001. 00:07 ] @
Pored toga, ovakva primena se ne slaže sa Unix filozofijom, koja kaže da ne treba ubijati komarce topom.
[ MoHicAn @ 19.08.2001. 17:42 ] @
Pa ne nisam se lepo izrazio

mislio sam ovako

znaci ja koristim /bin/bash
iz njega opalim exec program_koji_ocu _da_mi_radi_iz_pozadine
i exec ce da zameni bash tj da ga ubije i zameni tim programom
i on ce ostati da sljaka !!!
[ Vojislav Milunovic @ 19.08.2001. 17:48 ] @
Citat:
MoHicAn je napisao:
Cek
a sto ondak nebi mogao exec() da se koristi ???
posto sa forko() npravis identicni proces itd itd i onda kad se izlogujes parent umire a child je postao samostalan i ostao da radi !!!

e sto nebi tu koristio exec() on automatski ubija parenta i stvara novi samostalni proces !!!



Pa exec sluzi da se startuje neki program ali u ovom slucaju ja ne zelim da startujem program vec ocu da moj program radi u pozadini!!!!!
Naim i shell poziva vfork() ili fork() da bi izvrsio neki program...Sad zavisi da li si ti stavio & na kraju shell ce pozvati samo fork() ali ako nema & onda poziva fork() za kojim sledi wait() tj. ceka da dete zavrsi svoj rad.
E sad ja mislim da kad uradis & shell ceka na pojavu SIGCHLD signala ali to nisam siguran
[ MoHicAn @ 19.08.2001. 19:58 ] @
Citat:
predator je napisao:
Citat:
MoHicAn je napisao:
Cek
a sto ondak nebi mogao exec() da se koristi ???
posto sa forko() npravis identicni proces itd itd i onda kad se izlogujes parent umire a child je postao samostalan i ostao da radi !!!

e sto nebi tu koristio exec() on automatski ubija parenta i stvara novi samostalni proces !!!



Pa exec sluzi da se startuje neki program ali u ovom slucaju ja ne zelim da startujem program vec ocu da moj program radi u pozadini!!!!!
Naim i shell poziva vfork() ili fork() da bi izvrsio neki program...Sad zavisi da li si ti stavio & na kraju shell ce pozvati samo fork() ali ako nema & onda poziva fork() za kojim sledi wait() tj. ceka da dete zavrsi svoj rad.
E sad ja mislim da kad uradis & shell ceka na pojavu SIGCHLD signala ali to nisam siguran


Pa chek
rekao si da ako zelis da posaljes proces u pozadinu
pri STARTOVANJU procesa das mu iza & i on ide u pozadinu a onda si dobio pitanje sta ako proces ne moze da se detach-uje od terminala ...

Sa exec ime_programa bi startovao taj progy u pozadini i automatski bi se izlogovao onda se posle opet ulogujes i bole te uvo !!!

napomena ovo nisam probavao tako da ne tvrdim samo pretpostavljam ..
[ Vojislav Milunovic @ 19.08.2001. 23:39 ] @
Koliko ja znam procesi koji treba da su vezani za terminal,ako se posalju u pozadinu automatski zavrsavaju svoj rad (bc recimo) ali ovi kojima ne treba terminal mogu slobodno da se posalju u pozdainu (input procesi,znaci oni koji primaju input sa terminala ne mogu da idu u pozadinu dok drugi mogu)
[ MoHicAn @ 20.08.2001. 00:40 ] @
Pa dobro al sa exec ime_programa
odvajas bilo koji program od terminala i posle mos se logoutujes, logujes opet kolko oces itd itd
[ Vojislav Milunovic @ 20.08.2001. 01:11 ] @
Ne program ciji input zavisi od terminala ne moze u pozadinu ;o)
probaj bc da bacis u pozadinu i zavrsice se odmah...
[ MoHicAn @ 20.08.2001. 01:46 ] @
Pazi
vwdial na primer kad baciz u pozadinu ne da ti da se izlogujes
tj da al ce ubiti proces !!!

A npr preko appleta u gnomeu mos da ga bacis u pozadinu ...
[ MoHicAn @ 20.08.2001. 01:51 ] @
Citat:
predator je napisao:
Ne program ciji input zavisi od terminala ne moze u pozadinu ;o)
probaj bc da bacis u pozadinu i zavrsice se odmah...


Kako bre mislis input ????

input mu das pri pokretanju
mislm takvi procesi koji tokom rada traze input su retki i zanemarljivi !!!
[ Vojislav Milunovic @ 20.08.2001. 14:43 ] @
Kako mislis kaki input? Lep input sa tastature... bc recimo je za tebe zanemarljiv? Zalim ali ne mogu se sa tim sloziti ;o)
[ MoHicAn @ 23.08.2001. 10:36 ] @
E sad zanovetas predo
koji djavo ima da saljes program u pozadinu ako on ceka input !!!!

PS:
ono sa exec radi
naime evo ga i resenje za jedan mrvin problem ranije

wvdial nece da se detachuje od konzole obicnim & ili ctrl+z

al zato na primer u mom slucaju

exec wvdial yubc&

radi perfektno
i posle se izlogujem logujem kolko ocu !!!!
[ Vojislav Milunovic @ 23.08.2001. 14:14 ] @
Pa ja samo kazem da ti programi ne mogu da sljakaju u pozadini dok ostali mogu i te kako ;o)
[ MoHicAn @ 24.08.2001. 13:55 ] @
Ja ti opet kazem a ako mi jos jednom odgovoris kao malopre popizdecu !!!

startjes wvdial &
on izokrece broj poveze se lupis enter i on ode u pozadinu i ti imas #
Ali ti neda da se izlogujes !!!!
ako npr u x-u zatvporis terminal puce veza ...
ako remote zatvoris telnet ili ssh puche veza opet !!!!
Znaci nece da se detachuje od terminala !!!

ali oce ako uradis ono sto sam ja rekao

exec wvdial &

Al ne vidim koja je svrha da npr saljes vi u pozadinu !!!
i aj batali vise smor je postao
dao sam resenje na temu i batali vise !!!
[ Vojislav Milunovic @ 24.08.2001. 14:12 ] @
:eek: