Работа с интерфейсом прикладного программирования операционной системы Linux. Шашков Б.Д. - 13 стр.

UptoLike

Составители: 

13
Синхронизация процесса - родителя и процесса - потомка выполняется по
системному вызову wait(). Для завершения процессов служит функция
_exit().
В рассмотренном примере после порождения процессапотомка, роди-
тельский процесс выдает выводит на терминал идентификатор порожденного
процесса, задерживается на 5 секунд и вызывает функцию для опроса состояния
процессапотомка. Порожденный процесс выводит сообщение, содержащее
значение переменной x. Следует обратить внимание на то, что значение этой пе-
ременной совпадают и у родителя, и у потомка.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
int main()
{
int x, pid;
x=2;
printf("Single process, x=%d\n",x);
pid=fork();
if(pid == 0)
printf("New, x=%d\n",x); // Потомок
else if(pid > 0){ // Родитель
printf("Old, pid=%d, x=%d\n",pid,x);
sleep(5);
wait(pid);
}
else {
perror("Fork error ");
return -1;
}
return 0;
}
      Синхронизация процесса - родителя и процесса - потомка выполняется по
системному вызову wait(). Для завершения процессов служит функция
_exit().
      В рассмотренном примере после порождения процесса – потомка, роди-
тельский процесс выдает выводит на терминал идентификатор порожденного
процесса, задерживается на 5 секунд и вызывает функцию для опроса состояния
процесса – потомка. Порожденный процесс выводит сообщение, содержащее
значение переменной x. Следует обратить внимание на то, что значение этой пе-
ременной совпадают и у родителя, и у потомка.
      #include 
     #include 
     #include 
     #include 
     int main()
     {
         int x, pid;
         x=2;
         printf("Single process, x=%d\n",x);
         pid=fork();
         if(pid == 0)
           printf("New, x=%d\n",x); // Потомок
         else if(pid > 0){ // Родитель
                   printf("Old, pid=%d, x=%d\n",pid,x);
                   sleep(5);
                   wait(pid);
                   }
                else {
                   perror("Fork error ");
                   return -1;
                   }
         return 0;
     }




                                     13