Титла: fonov protses Публикувано от: mil_dim в 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. Титла: fonov protses Публикувано от: hint в Apr 05, 2002, 12:39 Дай някакъв пример за нещо не работещо. Ако искаш да пуснеш скрипт в фоноф режим, скрипта ще излезе, когато умре шела - все пак скрипта зависи от шела
![]() Ако пускаш някоя програма (не скрипт), то тогава програмата трябва да е написана специално да работи като "демон" - т.е. да не зависи от шела Титла: fonov protses Публикувано от: mil_dim в 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 Титла: fonov protses Публикувано от: mil_dim в 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 ;-) Титла: fonov protses Публикувано от: hint в 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 - Така програмата е независима от шела. Пробвай го Титла: fonov protses Публикувано от: mil_dim в 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. Титла: fonov protses Публикувано от: mil_dim в Apr 05, 2002, 18:19 bachka si i sas scriptove ;-)
ama taka - setsid script & inache bez & ne mi osvobiozdava konzolata Титла: fonov protses Публикувано от: pau4o в Apr 05, 2002, 23:43 ако не се лъжа, при скриптове процеса може да се пусне и да остане работещ след излизането на потребителя като командата да се пусне предхождана от nohup
пример:
това обаче важи само за процеси които не изискват терминал и винаги изисква пренасочване към файл на изхода си (по подразбиране nohup.out) С тази команда просто се предотвратява получаването на сигнала HUP (HangUP) и по този начин позволява на процеса да продължи действието си. Успех! ![]() |