proces w Linuxie w tle ????

28.10.02, 20:34
Jak moge powolac do zycia proces w tle - czyli uruchamiajac jeden program - a
ten automatycznie "w tle" powoluje drugi program - proces.
Prosze o komende i instrukcje
Dzieki
    • Gość: kell Re: proces w Linuxie w tle ???? IP: *.cpe.net.cable.rogers.com 28.10.02, 22:17
      nie bardzo rozumiem o co tobie dokladnie chodzi, ale
      zakladajac, ze nie potrzebujesz pisac skryptu moze chodzi
      o cos takiego:
      deathstar:~$ top& top
      1szy program bedzie uruchomiony w tle, drugi nie. i teraz
      mozesz ten drugi zatrzymac przez CTRL + Z
      gdy wpiszesz
      deathstar:~$ fg 1
      pierwszy proces zostanie przywrocony "na przod"

      poszukaj info o fg i bg
      • stratoos Re: proces w Linuxie w tle ???? 29.10.02, 00:31
        sprobuj screen'a
      • Gość: MaciekS Re: proces w Linuxie w tle ???? IP: *.mad.east.verizon.net 29.10.02, 03:39
        Gość portalu: kell napisał(a):

        > nie bardzo rozumiem o co tobie dokladnie chodzi, ale
        > zakladajac, ze nie potrzebujesz pisac skryptu moze chodzi
        > o cos takiego:
        > deathstar:~$ top& top
        > 1szy program bedzie uruchomiony w tle, drugi nie. i teraz
        > mozesz ten drugi zatrzymac przez CTRL + Z
        > gdy wpiszesz
        > deathstar:~$ fg 1
        > pierwszy proces zostanie przywrocony "na przod"
        >
        > poszukaj info o fg i bg



        Tak tylko ze pierwszy top wcale nie powoluje do zycia
        drugiego top. Shell robi w pierwszym wypadku prostego
        asynchronicznego forka z exec'iem czyli tworzy proces tla
        a potem robi forka z exec'iem jako proces
        pierwszoplanowy. W obu przypadkach robi to ten sam
        pierwotny proces shella.

        Zdaje sie ze chodzilo o to by stworzyc lancuch czyli
        proces pierwszy po po swoim powolaniu powolal nastepny
        proces. Przykladowo top po powolaniu powolal nastepny top.

        To chyba nie da sie zrealizowac bez pisania programu bo
        program musi wiedziec ze poza wlasnym zadaniem do
        wykonania musi jescze powolac nastepny proces potomny.


        Jezeli dobrze rozumiem to chodzilo o lancuszek, ale
        pewien nie jestem.

        Pozdrawiam
    • Gość: MaciekS Re: proces w Linuxie w tle ???? IP: *.mad.east.verizon.net 29.10.02, 04:30
      bajsar napisał:

      > Jak moge powolac do zycia proces w tle - czyli
      uruchamiajac jeden program - a
      > ten automatycznie "w tle" powoluje drugi program - proces.
      > Prosze o komende i instrukcje
      > Dzieki


      Czy naprawde chodzi Ci o to zeby nowopowolany proces
      powolal lancuchowo nastepny proces?

      Expertem Linux'a ani UNIX nie jestem, ale wydaje mi sie
      ze program musialby wiedziec ze ma powolac jakis proces a
      nie tylko wykonac swoje zadanie.Nie wiem czy ma sens taka
      komenda i czy w zwiazku z tym istnieje. Zamiast robic
      lancuszki to lepiej puszczac procesy w tle przy pomocy
      wywolania typu:

      $ komenda &

      z tej samej linii polecen. No ale to ten sam shell bedzie
      otwieral nowe procesy tla a to nie jest lancuszek.

      Jak chcesz lancuszek tworzenia procesow typu:

      $prog1 prog2 prog3

      To stworz programik o nazwie prog1 z kodu ponizej. prog2
      i prog3 to Twoje programy, ale mozesz tez pobawic sie w
      wolanie np.:
      $prog1 prog1 prog1

      W jezyku C to byloby cos zgrubsza takiego (komentarze i
      wydruki na konsole mozesz smialo usunac:


      #include <unistd.h>
      #include <stdio.h>


      int main(int argc, char * argv[]) {

      if(argcɚ) {
      printf("Potrzebny jeden argument: program/komenda do
      powolania nastepnego procesu!\n");
      return 0;
      }

      int iRezultat = fork();

      if(iRezultatɬ) { //Jestesmy w procesie rodzicielskim.
      printf( "Konczymy proces rodzicielski... a
      moglibysmy cos zrobic w nim. Szkoda.\n");

      }
      else if(iRezultat==0) { //Jestesmy w procesie potomnym.
      printf("Zastepujemy proces potomny.\n");
      execv(argv[1],&argv[2]); // Zastepujemy orginalny
      proces nowym (z parametru komendy).

      }
      else { // -1 czyli wystapil blad.
      printf("Blad tworzenia procesu potomnego w
      procesie.\n");
      }

      return 0;
      }

      Uprzedzam ze programy nie testowalem w 100%. Z pewnoscia
      ostatnie wolanie prog1 w lancuszku:

      $prog1 prog1

      spowoduje wydruk komunikatu o braku argumentu. Poza tym
      jest cos jeszcze czego dobrze nie sprawdzilem.
Pełna wersja