44 va_start (args, format);
45 vfprintf (stderr, format, args);
62 snprintf (buf,
sizeof (buf),
"%s (stopped at syscall)",
65 snprintf (buf,
sizeof (buf),
"%s (stopped)",
69 snprintf (buf,
sizeof (buf),
"%s (terminated)",
72 snprintf (buf,
sizeof (buf),
"%d (exited)",
WEXITSTATUS (status));
85 linux_debug (
"my_waitpid (%d, 0x%x)\n", pid, flags);
89 sigset_t block_mask, org_mask, wake_mask;
92 wnohang = (flags &
WNOHANG) != 0;
101 sigfillset (&block_mask);
102 sigprocmask (SIG_BLOCK, &block_mask, &org_mask);
105 sigemptyset (&wake_mask);
112 ret = waitpid (pid, status, flags);
115 if (ret == -1 && out_errno != ECHILD)
130 sigsuspend (&wake_mask);
136 sigprocmask (SIG_SETMASK, &org_mask, NULL);
141 ret = waitpid (pid, status, flags);
142 while (ret == -1 &&
errno == EINTR);
146 linux_debug (
"my_waitpid (%d, 0x%x): status(%x), %d\n",
147 pid, flags, (ret > 0 && status != NULL) ? *status : -1, ret);
static void linux_debug(const char *format,...)
char * status_to_str(int status)
int my_waitpid(int pid, int *status, int flags)