URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4457
[ Назад ]

Исходное сообщение
"разбираемся с форком"

Отправлено roman , 07-Июл-05 16:34 
Изучаю процессы. В качестве среды линукс с ядром 2.4.x
Вот такой простой код:

#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>

int main(void)
{
  int pid;                /* process PID */
  int status;

  /* create new process to handle client */
  if ( (pid = fork()) == -1 ) {
    perror("fork() error");
    exit(1);
  }

  /* here is child process running */
  if (pid == 0) {
    printf("child process, pid=%d ppid=%d\n", getpid(), getppid());
    int i;
    for (i=0; i < 1000000; i++) ;
  }

  /* here is parent process running */
  else {
    /* wait until child has exited */
    //pid = waitpid(-1, &status, WNOHANG);
    wait(&status);
    printf("child process %d terminated \n", pid);
  }

  return 0;
}

Что мне не понятно.
1) Для чего нужно ждать завершения ребенка (как пишут во всех доках)? В моем случае - child спокойно завершается и без wait (waitpid).
2) нужно ли в теле чайлда в конце кода ставить exit(SOME_CODE) или return?

Спасибо.


Содержание

Сообщения в этом обсуждении
"разбираемся с форком"
Отправлено Forth , 07-Июл-05 17:14 
1) Когда завершается дочерний процесс - его статус должен быть получен родительским процессом, пока этого не сделано - дочерний процесс незавершен, почти завершен, то есть пресловутый зомби. Кажется можно просто игнорировать сигнал SIGCHLD и тогда дочерний процесс будет нормально завершаться. А можно и обрабатывать по wait.
2) return - выход из функции. Если это выход из функции main - то в итоге будет вызов exit с аргументом return. Фактически одно и то же.
Нужно это учесть и быть внимательнее, поскольку return, вызванный внутри какой-либо функции программы - не приведет к её завершению. Вообщем return - это оператор выхода из функции, а exit - функция завершения процесса.

"searching for programmers"
Отправлено irina , 07-Июл-05 23:22 

Уважаемый Роман! Сама я - учительница английского языка в Риге. Мой сын и его фирма - профессиональный программист (25 лет)(кстати, тоже фанат Линукса)- ищет для работы на Америку несколько программистов (работа по Интернету). У него есть группа программистов из Тольятти, которые постоянно работают на него. Зарабатывают очень хорошо (более или менее 1000 долларов, зависит от вклада). Но сейчас они расширяются. Сам он живет сейчас с семьей в Ирландии, до этого жил в Латвии, это наша родина. Если вы заинтересованы - напишите мне - я дам его координаты. Ирина Малиновская. Ваш адрес я взяла из форума.