Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
#include <sys/types.h>
#include <unistd.h>
int main()
{
pid_t pid; // идентификатор процесса
int status; // код статуса завершения процесса
/* При помощи fork cоздаем дочерний процесс */
switch(pid = fork()) {
case -1:
perror("fork");
return -1;
case 0:
printf("Выполняется дочерний процесс ");
/* Код статуса завершения равен 4 */
exit(4);
}
printf("Выполняется родительский процесс ");
printf("Идентификатор дочернего процесса - %d ", pid);
/*
* Ждем завершения дочернего процесса
* и обрабатываем код статуса завершения
*/
if((pid = waitpid(pid, &status, 0)) && WIFEXITED(status)) {
printf("Дочерний процесс с PID = %d завершил выполнение ", pid);
printf("Код статуса завершения равен %d ", WEXITSTATUS(status));
}
return 0;
}
Функция waitpid приостанавливает выполнение родительского процесса, пока не завершится порожденный процесс. Первый аргумент этой функции (pid) указывает, завершения какого именно порожденного процесса следует ожидать.
Первый аргумент может принимать следующие значения:
n > 0 – ждать завершения процесса с данным идентификатором;
n 0 – ждать завершения любого порожденного процесса, принадлежащего к той же группе, что и родительский;
n -1 – ждать завершения любого порожденного процесса;
n < -1 – ждать любого порожденного процесса, идентификатор группы (GID) которого является абсолютным значением pid.
Второй аргумент будет содержать код статуса завершения процесса, поэтому он передается по ссылке. Возвращаемым значением функции будет PID порожденного процесса.
В нашем примере значение первого аргумента равно идентификатору дочернего процесса.