Троан Эрик В.
Шрифт:
Второй параметр — это указатель на целое, которое устанавливается в значение, равное соду возврата того процесса, который заставляет
Три события заставляют
21
В главе 15 описаны причины, по которым это может произойти.
WIFEXITED(status) | Возвращает true , если процесс завершился нормально. Процесс завершается нормально, когда его функция main выходит из программы посредством вызова exit . Если WIFEXITED истинно, то WEXITSTATUS(status) возвращает код возврата процесса. |
WIFSIGNALED(status) | Возвращает true , если процесс был прерван сигналом (это происходит, когда он прерывается вызовом kill ). В этом случае WTERMSIG(status) возвращает номер сигнала, прервавшего процесс. |
WIFSTOPPED(status) | Если процесс приостановлен сигналом, WIFSTOPPED возвращает true , a WSTOPSIG(status) возвращает номер сигнала, приостановившего процесс. wait4 возвращает информацию только о приостановленных процессах, если указана опция WUNTRACED . |
Аргумент
Финальный параметр
Существуют три других интерфейса к
pid_t wait(int *status) | Единственный параметр wait — это указатель на место, куда следует поместить код возврата прерванного процесса. Эта функция всегда блокирует выполнение до тех пор, пока дочерний процесс не будет прерван. |
pid_t waitpid (pid_t pid, int *status, int options) | Функция waitpid подобна wait4 . Единственное отличие в том, что она не возвращает информации об использовании ресурсов прерванным процессом. |
pid_t wait3(int *status, int options, struct rusage *rusage) | Эта функция также подобна wait4 , но не позволяет специфицировать дочерний процесс, который должен быть проверен. |
10.4.3. Запуск новых программ
Хотя доступно целых шесть способов запустить одну программу из другой, все они делают почти одно и то же — заменяют текущую выполняющуюся программу другой программой. Обратите внимание на слово "заменяет" — все следы текущей выполняющейся программы при этом исчезают. Если вы хотите оставить исходную программу работающей, вы должны создать новый процесс вызовом
Эти шесть функций лишь слегка отличаются по интерфейсу. Только одна из них —
Как уже упоминалось, все эти программы пытаются заменить текущую программу новой. Если это удается, то управление не возвращается (то есть программа, которая вызвала другую программу, уже не выполняется). Если не удается, то возвращается значение
22
Это тот же формат, который использует команда