SIGCONT на поведение MACOS X
Когда я вызываю waitpid() с установленными параметрами WUNTRACED|WCONTINUED, чтобы узнать, когда дочерний процесс получает SIGSTOP и SIGCONT. SIGSTOP не является проблемой, но я не могу перехватить сигнал sigcont с помощью функции WIFCONTINUED(stat), но программа продолжается, когда я посылаю сигнал с терминала. Прикрепленный код иллюстрирует проблему: SIGCONT для дочернего процесса продолжают дочерний процесс, но waitpid() остается заблокированным, а SIGCONT просто не замечается родителем.
Тем не менее, код полностью функционален под Sparc Solaris 2
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <signal.h>
main() {
pid_t pid;
if ( (pid = fork()) == -1 )
printf("could not fork");
else if ( pid == 0 ) { /* child */
sleep(1); /* wait for the parent to prepair */
kill(getpid(),SIGSTOP); /* send SIGSTOP to myself */
while(1); /* loop */
}
else { /* parent */
int stat;
waitpid(pid,&stat,WUNTRACED|WCONTINUED);
while ( WIFSTOPPED(stat) || WIFCONTINUED(stat) ) {
if ( WIFSTOPPED(stat) ) {
printf("child was stopped\n");
/* if the next line is uncommented, SIGCONT is caught property */
/* kill(pid,SIGCONT); */
}
if ( WIFCONTINUED(stat) ) {
/* this part is never reached */
printf("child was continued\n");
kill(pid,SIGTERM); /* terminate child */
}
waitpid(pid,&stat,WUNTRACED|WCONTINUED);
}
}
}