Автор Тема: fonov protses  (Прочетена 3033 пъти)

mil_dim

  • Напреднали
  • *****
  • Публикации: 43
    • Профил
fonov protses
« -: Apr 05, 2002, 06:15 »
savsem me oburkaha tezi fonovi protsesi.
poslednite dni samo te me tormozat.
iskam da pusna ot shel script fonov protses
sas & ponekoga stava, ponekoga ne ;-(
s nekoi programi satva , s drugi ne . ot klakvo zavisi?
nekoj moze li da obiasni logikata? probvah s exec, & - stranni rezultati , razlichni ;-(.
poslednata mi muka naprimer e - iskam potrebitel da puska
nekolko programi, bez da ima shell a kato izlezne - da ostanat raboteshti. ednata e wvdial, drugata e edna potrebitelska.
sega bachka - vav .profile sa programite , sas & . da ama taka ne mi haresva - ako burzo dade Ctrl+C si vzema shell, a az ne iskam.
znachi napisah si gi vav edno shell scriptche , i vav /etc/passwd
vmesto shell.  purvo e wvdial & i posle programkata mi.
vsichko ok, ama kato svurshi programata mi , svurshva scripta, i umira i wvdial.
a i mnogo drugi opiti imam i ne moga da shvana koga ostava kato fonov protses i bez porodilia go skript i koga ne. aa, a osven tova ponekoga vupreki che ima & scripta spira, i prodalzava chak kato svurshi vaprosnia "fonov" protses.
nadevam se che ste mi razbrali  vaprosa i trudnosstta, ne mi se postvaha primeri, ama ako trebva ste postna.
Активен

hint

  • Напреднали
  • *****
  • Публикации: 39
    • Профил
fonov protses
« Отговор #1 -: Apr 05, 2002, 12:39 »
Дай някакъв пример за нещо не работещо. Ако искаш да пуснеш скрипт в фоноф режим, скрипта ще излезе, когато умре шела - все пак скрипта зависи от шела '<img'>
Ако пускаш някоя програма (не скрипт), то тогава програмата трябва да е написана специално да работи като "демон" - т.е. да  не зависи от шела
Активен

mil_dim

  • Напреднали
  • *****
  • Публикации: 43
    • Профил
fonov protses
« Отговор #2 -: Apr 05, 2002, 16:17 »
ok, ste postna utre experimentite mi.
znachi nema nachin edin skript da pusne drug , a slet tva da svurshi i da ostane samo pusnatia po-kusno ot nego ?
kakvo znachi programite da sa napisani spers. da rabotat kato demon? - chetoh neshto tam za fork, exec i t.n.
ama ne mi e mnogo iasno programiraneto. edno primerche ako imash ?
zasega vazno mi e tva - shela da svirshi, izleze, a pusnatia ot nego wvdial da ostane. viz mi v gornia posting situatsiata s wvdial, scripta i .profileto
Активен

mil_dim

  • Напреднали
  • *****
  • Публикации: 43
    • Профил
fonov protses
« Отговор #3 -: Apr 05, 2002, 16:39 »
znachi vednaga ti davam edin exper. v 2 varianta.
imam slednite 2 skripta :
 ff -->  #!/bin/bash
           for i in `seq 1 1000` ; do echo exam$1 $i ; sleep 1
           done
i  ff1 --> #!/bin/bash
             for i in `seq 6 12` ; do  /ff $i &  ; done

znachi puskam si go tva ff1 , to si mi razda 6 protsesa, logoutvam si se, i protsesite si bachkat, all ok , kakto trebe da si e.
onache sustia tozi ff1 ,  prava si edin user ff , koito ima vav /etc/passwd za shell  /ff1 . logvam se razdat se 6-te protsesa, pochvat, ama kat se rodi i 6-tia i otide na fona, ff1 svurshva, konzolata izliza i... 6-te protseas susto umirat !!
e, ne iskam  da umirat tolkova mladi i zeleni ;-)
Активен

hint

  • Напреднали
  • *****
  • Публикации: 39
    • Профил
fonov protses
« Отговор #4 -: Apr 05, 2002, 16:45 »
Това е един примерен код на C, който пуска един демон, независим от шела, от който е стартиран:
#include <sys/types.h>
#include <unistd.h>
int main (int argc,char **argv){
 pid_t pid;
    pid = fork();
     if (pid < 0) {
             perror ("daemon fork");
             return -1;
        }
     if (pid != 0) return 0;
      pid = setsid();
     if (pid < 0) {
         perror ("daemon setsid");
         return -1;   
     }   
    while(1) sleep(10);   
}

Ако искаш да пуснеш програма, която не е написана специално да работи като демон - има два начина:
1. prog.bin &     - Така като умре шела, умира и програмата
2. setsid prog.bin  - Така програмата е независима от шела. Пробвай го
Активен

mil_dim

  • Напреднали
  • *****
  • Публикации: 43
    • Профил
fonov protses
« Отговор #5 -: Apr 05, 2002, 17:40 »
sas setsid stana, mersi mnogo ;-)
C-programkata ste ia probvam.
za setsid pishesh - .bin . samo za binarys li bachka? za skriptove ne stava li?
ste goprobvam de ;-)
oste vednaz mersi mnogo.
Активен

mil_dim

  • Напреднали
  • *****
  • Публикации: 43
    • Профил
fonov protses
« Отговор #6 -: Apr 05, 2002, 18:19 »
bachka si i sas scriptove ;-)
ama taka -
setsid  script &
inache bez & ne mi osvobiozdava konzolata
Активен

pau4o

  • Напреднали
  • *****
  • Публикации: 35
    • Профил
    • WWW
fonov protses
« Отговор #7 -: Apr 05, 2002, 23:43 »
ако не се лъжа, при скриптове процеса може да се пусне и да остане работещ след излизането на потребителя като командата да се пусне предхождана от nohup
пример:
Примерен код
nohup find / -name neshto -print > find.out &

това обаче важи само за процеси които не изискват терминал и винаги изисква пренасочване към файл на изхода си (по подразбиране nohup.out)
С тази команда просто се предотвратява получаването на сигнала HUP (HangUP) и по този начин позволява на процеса да продължи действието си.
Успех!  '<img'>
Активен

поздрави
KaMeH
[reg your bg translation or grab one from http://www.bgit.net/?id=37892]
[регистрирайте вашият превод или намерете нужният Ви на http://www.bgit.net/?id=37892]