Hi all!
Не понимаю вот такую вещь. В man waitpid сказано:
ERRORS: ECHILD - if the process specified in pid does not exist or is not a child of the calling process. (This can happen for one's own child if the action for SIGCHLD is set to SIG_IGN...)
С другой стороный, умолчательное действие SIGCHLD, как явствует из man 7 signal:
... SIGCHLD 20,17,18 Ign Child stopped or terminated ...
- игнорировать сигнал.
Из "Правил игры в сигналы UNIX", правило 1, с.3, (http://groups.google.ru/group/fido7.ru.unix.prog/msg/5c851b9f03715729?q=g:thl89 75867d&dq=&hl=ru&lr=&rnum=36) следует, что действие по умолчанию для SIGCHLD совпадает с SIG_IGN.
Следовательно, если не переопределять действие SIGCHLD, waitpid будет завершаться с ошибкой ECHILD! Но если я не хочу устанавливать свой обработчик, то как же мне быть? И вообще, в любых руководствах по программированию в униксах, когда речь заходит о wait/waitpid, в пример приводятся простые программки, в которых процесс форкается и parent спокойно делает waitpid на чайлда без всяких дополнительных обработчиков.
Подскажите, где я неправ, что курить?