version 1.26, 2007/03/26 06:22:12 |
version 1.27, 2007/03/26 06:40:01 |
|
|
sleep(1); |
sleep(1); |
goto top; |
goto top; |
} |
} |
errno = saved_errno; |
|
perror("fork"); |
|
free(p); |
free(p); |
|
errno = saved_errno; |
return (-1); |
return (-1); |
} |
} |
if (pid == 0) { |
if (pid == 0) { |
|
|
for (;;) { |
for (;;) { |
xpid = waitpid(pid, (int *)&st, WUNTRACED); |
xpid = waitpid(pid, (int *)&st, WUNTRACED); |
if (xpid == -1) { |
if (xpid == -1) { |
if (errno != EINTR) { |
if (errno != EINTR) |
warn("waidpid"); |
|
return (-1); |
return (-1); |
} |
|
} else if (WIFSTOPPED(st)) |
} else if (WIFSTOPPED(st)) |
raise(WSTOPSIG(st)); |
raise(WSTOPSIG(st)); |
else if (WIFEXITED(st)) |
else if (WIFEXITED(st)) |
|
|
(void)signal(SIGHUP, sighup); |
(void)signal(SIGHUP, sighup); |
(void)signal(SIGINT, sigint); |
(void)signal(SIGINT, sigint); |
(void)signal(SIGQUIT, sigquit); |
(void)signal(SIGQUIT, sigquit); |
if (!WIFEXITED(st) || WEXITSTATUS(st) != 0) |
if (!WIFEXITED(st) || WEXITSTATUS(st) != 0) { |
|
errno = ECHILD; |
return (-1); |
return (-1); |
|
} |
return (0); |
return (0); |
} |
} |
|
|