У меня проблемы с упражнением по разветвлению процесса. Я хочу разветвить дочерний процесс и заставить его зависнуть после объявления о том, что он был разветвлен, и дождаться завершения сигнала, после чего родительский процесс должен объявить, что он завершается, а затем выйти.
Я могу получить ответвление процессов и заставить родителя ждать, пока висящий дочерний элемент не будет убит сигналом, но, похоже, он также убивает родителя. Я попытался убить дочерний процесс специально по его PID, но безуспешно.
Спасибо за любую помощь!
Код:
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>
void catchInt (int signum)
{
printf("\nMy sincerest apologies, master\n");
/*kill(0, SIGINT);*/
exit(0);
}
void ignoreInt (int signum)
{
wait(NULL);
}
int main () {
pid_t pid;
/* fork process */
pid = fork();
if (pid < 0) /* error handler */
{
fprintf(stderr, "Fork Failed");
exit(-1);
}
else if (pid == 0) /* child */
{
printf("Child reporting in\n");
signal(SIGINT, catchInt);
for ( ;; )
pause();
}
else /* parent */
{
/* parent will wait for the child to complete */
signal(SIGINT, ignoreInt);
wait(NULL);
printf("You're welcome\n");
exit(0);
}
}
<unistd.h>
дважды, а в наши дни не нужно<sys/types.h>
(хотя в некоторых более ранних версиях POSIX это было необходимо). - person Jonathan Leffler   schedule 19.09.2010tempPID
полностью не объявлен и читается в обработчике сигналов, который используется только в родительском процессе, несмотря на то, что он установлен только в дочернем процессе. По крайней мере, исправьте это, и мы увидим, где мы сможем вас оттуда достать. - person Tim Yates   schedule 19.09.2010