Оқулық «Федералдық білім беруді дамыту институты»



Pdf көрінісі
бет59/158
Дата01.07.2023
өлшемі3.83 Mb.
#475485
түріОқулық
1   ...   55   56   57   58   59   60   61   62   ...   158
операциялық жуйелер

82 
 
SYMLOOP_MAX 
санынан асып түскені белгілі болды. Бұл 
параметрлердің мәндерін getconf -a команданы көмегімен анықтауға 
болады. 
2. Атқарым шақырылатын файл орындалмайтын болып саналады, 
қарапайым файл емес немесе ондай файл мүлдем жоқ.
3. Іске қосылып жатқан процеске берілетін параметрлер тізімі өте 
ұзақ.
Параметрлердің максимал рұқсат етілген саны максимал рұқсат 
етілген командалық жолақ ұзақтығы негізінде анықталады. POSIX
стандартына сай бұл мән 4 096 аз болмау керек. Нақты жүйелерде бұл 
мән бірнеше есе үлкен. Жүйе үшін бұл шектеуді анықтау үшін getconf 
ARG_MAX команданы қолдануға болады. Параметр ARG_MAX 
командалық жолақта рұқсат етілген символдардың максимал санынан 
тұрады. Шынында орындалатын команданың максимал ұзындығына 
қосымша шектеулер қойылады. POSIX стандартына сай орындалу 
үстіндегі команданың максимал рұқсат етілген ұзақтығын expr 'getconf 
ARG_MAX' - 'env|wc -c' - 2048 команданың көмегімен есептеп 
шығаруға болады. Оған қоса жүйе бір параметр ұзындығына да шектеу 
қояды. Төменде келтірілген мысалды аталық-процес жаңа процесті 
туындатады, ол параметрі -1 бағдарламасын /bin/ls іске қосады. Топ-
процесінің кодын толықтай ауыстыру жүріп жатқандықтан _exit()т 
атқарымын шақыру міндетті емес: 
#include 
#include 
#include 
int main(void)
{
pid_t pid; int status; if (fork() == 0)
{
/* топтың денесі */ execl("/bin/ls", "/bin/ls", "-l", 
0); 
}
/* аналық дененің жалғасы */ wait(&status);
printf("Child return code %d\n",
WEXITSTATUS(status));
return 0;
}
Бағдарлама келесіні шығарады:
total 17


83
 
-rwxr-xr-x 1 nick users 9763 Oct 11 15:41 a.out -
rwxrwxrwx 1 nick users 986 Oct 11 15:20 fork1.c -
rwxrwxrwx 1 nick users 321 Oct 11 15:40 fork2.c Child 
return code 0
Аталық-процес топ жасағаннан кейін оның аяқталуын wait() 
атқарымы көмегімен күтеді:
#include 
#include 
pid_t wait(int *status);
Бұл атқарым топ-процесінің орындалып болуын (егер олар бірнеше 
болса, олардың қайсысы бірінші аяқталатыны маңызды) Атқарым 
қайтаратын мәнді — аяқтайтын процестің PID мәнін күтеді. Статус 
мәнін сілтеме бойынша беретін атқарымдар топтың қайтып келу коды 
туралы ақпаратты кодтайтын санды және аяқталу сәтіндегі оның күйін 
білдіреді. Қызықтыратын ақпаратты қарау 
үшін WEXIT...0 
макроанықтауыштардың 
бірін 
пайдалану 
қажет. 
Мысалы,
WEXISTATUS() макроанықтауыш статус мәніндегі қайтару кодының 
номерін қайтарады. 
Егер процес бірнеше топты іске қосып нақты бір процестің 
аяқталуын күту қажет болса waitpid() атқарымы қолданылады:
#include 
#include 
pid_t waitpid(pid_t pid, int *status, int options);
бұл атқарымның бірінші аргументі — аяқталуын күтіп отырған PID
процесі, екіншісі – статус мәні. Үшінші параметр атқарымның жұмыс 
режимін анықтайды. 
Егер үшінші параметр 0 тең болса, ең болмағанда бір топ 
аяқталмайынша процестің орындалуы тоқтайды.
Егер үшінші параметр ретінде WNOHANG константа берілсе, 
статус мәні тек топ өз орындалуын аяқтағаннан кейін ғана 
меншіктеледі; ол орындалмаған жағдайда аналық процестің орындалуы 
жалғаса береді. Егер WNOHANG параметрі шықса және топ әлі 
аяқталмаса, онда waitpid() атқарымы 0 қайтарады:
#include 
#include 
#include 
void main(void)
{




Достарыңызбен бөлісу:
1   ...   55   56   57   58   59   60   61   62   ...   158




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет