81
PID = 1
Бағдарламаның келтірілген мысалында келесі іске назар аудару
қажет: егер case сәйкес нұсқа ішінде топ-процесінен шығуды
қамтамасыз етпесе, онда топ case
ішінде бағдарламалық кодты
орындауды аяқтап болған соң, switch() құрылысының жабылатын
жақшасынан кейін орналасқан кодты орындауды жалғастырады. Көп
жағдайда бұндай әрекеттің алдын алу керек. Берілген қайтару кодымен
процестен нақты шығу үшін _exit(<қайтару коды>) атқарымы
қолданылады. Бұл
атқарым шақырту процесін жойып, келесі
әрекеттердің орындалуына алып келеді:
■
жеткізілуді күтіп отырған барлық сигналдар өшеді (10.3-бөлімін
қараңыз);
■
барлық ашық файлдар жабылады;
■
ресурстарды пайдалану статистикасы proc файлдық жүйеде
сақталады;
■
аталық-процес хабарлайды және топтардағы
PPID орын
ауыстырылып қойылады
;
■
процес күйі «
зомби» ауысады (4.3-бөлімін қараңыз). Процес
жұмысын аяқтаудың басқа тәсілдері басқа бөлімдерде қарастырылатын
болады.
процес-
топты аяқтау үшін exit() атқарымының орнына _exit()
қолдану керек. Ал, _exit() атқарымы процеске қатысты ядро
құрылымын — дескриптор мен процес контексті тазартады. Одан
ерекше
exit()
атқарымы
көрсетілген
әрекеттерге
қосымша
пайдаланушы деректерінің барлық құрылымын бастапқы күйге
қайта
әкеледі. Мұның нәтижесінде аналық-процестің құрылымына зақым
келетін жағдай туындауы ықтимал. Еxit () қызметі тек аналық-
процеспен орындалатын атқарымдарда пайдаланылады.
Көп жағдайда fork() атқарымы exec...()
тобының атқарымдарының
бірімен бірге қолданылады. Бұл атқарымдарды бірге қолдану кезінде
жаңа процесті жүргізу және одан жаңа бағдарламаны жіберу мүмкіндігі
бар.
Еxec...() атқарымын орындау нәтижесінде бағдарламалық код пен
процестердің
деректері
жіберіліп
жатқан
бағдарламаның
бағдарламалық кодына ауысады. Өзгеріссіз
қалатын тек процес
идентификаторы PID мен PPID аналық процес идентификаторы.
Егер exec...() тобының атқарымының орындалуы сәтсіз аяқталса, ол
мынадай себептерден болуы ықтимал:
1. Орындалатын
файлға апаратын жол жүйелік параметр
PATH_MAX мәнінен асып түседі, файлға дейінгі жолдың элементі
NAME_MAX жүйелік параметр мәнінен асып түседі
немесе файл
атауының рұқсаты кезінде жолдағы символдық сілтемелер саны