/*
Программа для иллюстрации ненадежности сигналов */
#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){
int i;
/* Устанавливаем обработчик для сигнала
SIGCHLD */
(void) signal(SIGCHLD, my_handler);
/* В цикле порождаем 5 процессов-детей */
for (i=0; i<5; i++){
exit(1);
exit(200 + i);
/* Продолжение процесса-родителя - уходим на новую итерацию
*/
/* Продолжение процесса-родителя - уходим в цикл
*/
while(1);
return 0;