79
Осыған қарамастан процес келесідей қасиеттерді аталық процестен
иемденеді:
■
бағдарламаның командалық жолақтарының аргументтері;
■
ауысымдық орта;
■
процесті іске қосқан пайдаланушылардың (UID) нақты және тиімді
(EUID) идентификаторлары;
■
процесті іске қосқан топтардың шын (GID) және тиімді (EGID)
идентификаторлары;
■
артықшылық;
■
сигналдарды өңдеу құрылғылары (10.3.5-бөлімін қараңыз).
Егер
процес-буынын жасау сәтсіздікке ұшыраса fork() қызметі -1 мәнін
қайтарады. Оның себебі келесі жағдайлардың бірі болуы ықтимал:
■
ағымдағы пайдаланушы үшін процестердің максимал санының асып
кетуі. Мысалы BASH қабатын
қолданған кезде ағымдағы
шектеулерді ulimit -u команданың көмегімен білуге немесе
өзгертуге болады;
■
рұқсат етілген еншілес процестер санының толып кетуін getconf
CHILD_MAX команданы арқылы еншілес
процестердің максимал
санының шектеуін білуге болады;
■
жүйеде процестердің максимал санының асып кетуі. Бұл шектеуді
жүйе өзі қояды және оны sysctl fs.file-max
команданың көмегімен
немесе /proc/sys/fs/file-max файлын қарау арқылы білуге болады.
■
оперативті жады мен
тарту бөлімінің көлемімен анықталатын
виртуал жады сарқылған.
Fork () атқарымы сәтті орындалған
жағдайда процес-буынның PID
аталық процеске және 0 тегі-процеске қайтарады. Процестер
идентификаторларын сақтау үшін pid_t айналмалы түрі қолданылады.
Көп жүйелерде бұл түрі int типіне ұқсас,
дегенмен int типін қолдану
UNIX
болашақ
нұсқаларымен
ұқсастықты
қамтамасыз
ету
ұсынылмайды.
PID және PPID мәндерін алу үшін сәйкесінше getpid() және
getppid() атқарымлары қолданылады. Олар қайтаратын мәннің типі—
pid_t:
#include
#include
pid_t getpid(void);
pid_t getppid(void);
fork() атқарымы шақыртылғаннан кейін екі процестің орындалуы да
— аталық және топтар олардан кейін еретін командалар арқылы
жалғасады, әр процес орындайтын бағдарламалық кодты шектеу қажет.
Ол үшін ең айқын тәсіл — fork() қызметін қайтаратын тексеруші
кодтың қажет бөліктерін әр түрлі шарт тармақтарында орындау.