у меня есть программа, которая посылает сигнал SIGCHLD всем другим процессам в системе ДВАЖДЫ. проблема в том, что его отправили только один раз.
программа, отправляющая сигнал:
int main(){
kill(-1, SIGCHLD);
sleep(8);
kill(-1, SIGCHLD);
return 0;}
программа, получающая сигналы:
int main(){
struct sigaction sigchldHandler;
sigchldHandler.sa_flags = 0;
sigset_t BlockMask;
sigfillset(&BlockMask);
sigchldHandler.sa_mask = BlockMask;
sigchldHandler.sa_handler = sigchldFunction;
if( sigaction( SIGCHLD, &sigchldHandler, NULL ) != 0 ){
perror( "sigaction() error\n" );}
while(1){
pause()}
return 0;
}
функция:
void sigchldFunction(int signal){
write(1, "gets here only once\n", strlen("gets here only once\n"));
startHandling();
}
почему он не получает второй сигнал, а только первый? ...ПОМОЩЬ??
short != clear
. Не экономьте на пробелах и новых строках. Разве вы не видели здесь другие вопросы с кодом? - person Eugene Sh.   schedule 09.06.2016startHandling()
, поэтому мы не можем быть уверены, но вы предположительно находитесь внутриstartHandling()
с SIGCHLD, заблокированным от вашего обработчика сигнала, потому что вы не указали SA_NODEFER. Таким образом, второй сигнал эффективно игнорируется до тех пор, пока вы не покинете обработчик сигнала. - person pilcrow   schedule 09.06.2016sigchldFunction()
. Вот что означает блокировка всех сигналов. - person Jonathan Leffler   schedule 09.06.2016