/*
Программа с асинхронным получением информации о статусе 2-х завершившихся порожденных
процессов */
#include <sys/types.h>
#include <unistd.h>
#include <waith>
#include <signal.h>
#include <stdio.h>
/* Функция my_handler
- обработчик сигнала SIGCHLD */
void my_handler(int nsig){
pid_t pid;
/* Опрашиваем статус завершившегося процесса и одновременно
узнаем его идентификатор */
if((pid = waitpid(-1, &status, 0)) < 0){
printf("Some error on waitpid errno = %d\n", errno);
if ((status & 0xff) == 0) {
printf("Process %d was exited with status %d\n", pid, status >> 8);
printf("Process %d killed by signal %d %s\n", pid, status &0x7f,
(status & 0x80) ? "with core file" : "without core file");
int main(void){
/* Устанавливаем обработчик для сигнала
SIGCHLD */
(void) signal(SIGCHLD, my_handler);
/* Порождаем Сhild 1 */
if((pid = fork()) < 0){
exit(1);
exit(200);
/* Продолжение процесса-родителя - порождаем Сhild
2 */
if((pid = fork()) < 0){
exit(1);
while(1);
/* Продолжение процесса-родителя - уходим в цикл
*/
while(1);
return 0;