<sys/wait.h>
Change-Id: I24605df209d012e99333065428a3ed2752799321
This commit is contained in:
		
							parent
							
								
									78da142dab
								
							
						
					
					
						commit
						256829c7e8
					
				@ -10,8 +10,6 @@
 | 
			
		||||
 | 
			
		||||
#define NO_TRACER	   0	/* process is not being traced */
 | 
			
		||||
 | 
			
		||||
#define DUMPED          0200	/* bit set in status when core dumped */
 | 
			
		||||
 | 
			
		||||
#define MAX_CLOCK_T	((unsigned long) 1 << ((sizeof(clock_t) * 8) - 1))
 | 
			
		||||
#define MAX_SECS	( (clock_t) (MAX_CLOCK_T/system_hz) )
 | 
			
		||||
				/* max.secs for setitimer() ((2^31-1)/HZ) */
 | 
			
		||||
 | 
			
		||||
@ -499,8 +499,7 @@ int do_waitpid()
 | 
			
		||||
				if (sigismember(&rp->mp_sigtrace, i)) {
 | 
			
		||||
					sigdelset(&rp->mp_sigtrace, i);
 | 
			
		||||
 | 
			
		||||
					mp->mp_reply.PM_WAITPID_STATUS =
 | 
			
		||||
						0177 | (i << 8);
 | 
			
		||||
					mp->mp_reply.PM_WAITPID_STATUS = W_STOPCODE(i);
 | 
			
		||||
					return(rp->mp_pid);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
@ -649,7 +648,7 @@ register struct mproc *child;	/* tells which process is exiting */
 | 
			
		||||
 | 
			
		||||
  /* Wake up the parent by sending the reply message. */
 | 
			
		||||
  parent->mp_reply.PM_WAITPID_STATUS =
 | 
			
		||||
	(child->mp_exitstatus << 8) | (child->mp_sigstatus & 0377);
 | 
			
		||||
	W_EXITCODE(child->mp_exitstatus, child->mp_sigstatus);
 | 
			
		||||
  reply(child->mp_parent, child->mp_pid);
 | 
			
		||||
  parent->mp_flags &= ~WAITING;		/* parent no longer waiting */
 | 
			
		||||
  child->mp_flags &= ~ZOMBIE;		/* child no longer a zombie */
 | 
			
		||||
@ -673,7 +672,7 @@ struct mproc *child;			/* tells which process is exiting */
 | 
			
		||||
  tracer = &mproc[mp_tracer];
 | 
			
		||||
 | 
			
		||||
  tracer->mp_reply.PM_WAITPID_STATUS =
 | 
			
		||||
	(child->mp_exitstatus << 8) | (child->mp_sigstatus & 0377);
 | 
			
		||||
	W_EXITCODE(child->mp_exitstatus, (child->mp_sigstatus & 0377));
 | 
			
		||||
  reply(child->mp_tracer, child->mp_pid);
 | 
			
		||||
  tracer->mp_flags &= ~WAITING;		/* tracer no longer waiting */
 | 
			
		||||
  child->mp_flags &= ~TRACE_ZOMBIE;	/* child no longer zombie to tracer */
 | 
			
		||||
 | 
			
		||||
@ -23,6 +23,7 @@
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <sys/resource.h>
 | 
			
		||||
#include <sys/utsname.h>
 | 
			
		||||
#include <sys/wait.h>
 | 
			
		||||
#include <machine/archtypes.h>
 | 
			
		||||
#include <env.h>
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
@ -359,7 +360,7 @@ static void handle_vfs_reply()
 | 
			
		||||
 | 
			
		||||
  case VFS_PM_CORE_REPLY:
 | 
			
		||||
	if (m_in.VFS_PM_STATUS == OK)
 | 
			
		||||
		rmp->mp_sigstatus |= DUMPED;
 | 
			
		||||
		rmp->mp_sigstatus |= WCOREFLAG;
 | 
			
		||||
 | 
			
		||||
	exit_restart(rmp, TRUE /*dump_core*/);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -31,6 +31,7 @@
 | 
			
		||||
#include <minix/com.h>
 | 
			
		||||
#include <minix/callnr.h>
 | 
			
		||||
#include <sys/ptrace.h>
 | 
			
		||||
#include <sys/wait.h>
 | 
			
		||||
#include <signal.h>
 | 
			
		||||
#include "mproc.h"
 | 
			
		||||
 | 
			
		||||
@ -267,7 +268,7 @@ int signo;
 | 
			
		||||
	sigdelset(&rmp->mp_sigtrace, signo);
 | 
			
		||||
 | 
			
		||||
	rpmp->mp_flags &= ~WAITING;	/* parent is no longer waiting */
 | 
			
		||||
	rpmp->mp_reply.PM_WAITPID_STATUS = 0177 | (signo << 8);
 | 
			
		||||
	rpmp->mp_reply.PM_WAITPID_STATUS = W_STOPCODE(signo);
 | 
			
		||||
	reply(rmp->mp_tracer, rmp->mp_pid);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										139
									
								
								sys/sys/wait.h
									
									
									
									
									
								
							
							
						
						
									
										139
									
								
								sys/sys/wait.h
									
									
									
									
									
								
							@ -34,42 +34,41 @@
 | 
			
		||||
#ifndef _SYS_WAIT_H_
 | 
			
		||||
#define _SYS_WAIT_H_
 | 
			
		||||
 | 
			
		||||
#include <sys/cdefs.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/featuretest.h>
 | 
			
		||||
 | 
			
		||||
/* The <sys/wait.h> header contains macros related to wait(). The value
 | 
			
		||||
 * returned by wait() and waitpid() depends on whether the process 
 | 
			
		||||
 * terminated by an exit() call, was killed by a signal, or was stopped
 | 
			
		||||
 * due to job control, as follows:
 | 
			
		||||
 *
 | 
			
		||||
 *				 High byte   Low byte
 | 
			
		||||
 *				+---------------------+
 | 
			
		||||
 *	exit(status)		|  status  |    0     |
 | 
			
		||||
 *				+---------------------+
 | 
			
		||||
 *      killed by signal	|    0     |  signal  |
 | 
			
		||||
 *				+---------------------+
 | 
			
		||||
 *	stopped (job control)	|  signal  |   0177   |
 | 
			
		||||
 *				+---------------------+
 | 
			
		||||
/*
 | 
			
		||||
 * This file holds definitions relevent to the wait4 system call
 | 
			
		||||
 * and the alternate interfaces that use it (wait, wait3, waitpid).
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Macros to test the exit status returned by wait
 | 
			
		||||
 * and extract the relevant values.
 | 
			
		||||
 */
 | 
			
		||||
#if !( defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE) ) || defined(_KERNEL)
 | 
			
		||||
#define	_W_INT(i)	(i)
 | 
			
		||||
#else
 | 
			
		||||
#define	_W_INT(w)	(*(int *)(void *)&(w))	/* convert union wait to int */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define _LOW(v)		( (v) & 0377)
 | 
			
		||||
#define _HIGH(v)	( ((v) >> 8) & 0377)
 | 
			
		||||
#define	_WSTATUS(x)	(_W_INT(x) & 0177)
 | 
			
		||||
#define	_WSTOPPED	0177		/* _WSTATUS if process is stopped */
 | 
			
		||||
#define WIFSTOPPED(x)	(_WSTATUS(x) == _WSTOPPED)
 | 
			
		||||
#define WSTOPSIG(x)	((int)(((unsigned int)_W_INT(x)) >> 8) & 0xff)
 | 
			
		||||
#define WIFSIGNALED(x)	(_WSTATUS(x) != _WSTOPPED && _WSTATUS(x) != 0)
 | 
			
		||||
#define WTERMSIG(x)	(_WSTATUS(x))
 | 
			
		||||
#define WIFEXITED(x)	(_WSTATUS(x) == 0)
 | 
			
		||||
#define WEXITSTATUS(x)	((int)(((unsigned int)_W_INT(x)) >> 8) & 0xff)
 | 
			
		||||
#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE) || defined(_KERNEL)
 | 
			
		||||
#define	WCOREFLAG	0200
 | 
			
		||||
#define WCOREDUMP(x)	(_W_INT(x) & WCOREFLAG)
 | 
			
		||||
 | 
			
		||||
#define WIFEXITED(s)	(_LOW(s) == 0)			    /* normal exit */
 | 
			
		||||
#define WEXITSTATUS(s)	(_HIGH(s))			    /* exit status */
 | 
			
		||||
#define WTERMSIG(s)	(_LOW(s) & 0177)		    /* sig value */
 | 
			
		||||
#define WIFSIGNALED(s)	((((unsigned int)(s)-1) & 0xFFFFU) < 0xFFU) /* signaled */
 | 
			
		||||
#define WIFSTOPPED(s)	(_LOW(s) == 0177)		    /* stopped */
 | 
			
		||||
#define WSTOPSIG(s)	(_HIGH(s) & 0377)		    /* stop signal */
 | 
			
		||||
#define	W_EXITCODE(ret, sig)	((ret) << 8 | (sig))
 | 
			
		||||
#define	W_STOPCODE(sig)		((sig) << 8 | _WSTOPPED)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Option bits for the third argument of waitpid.  WNOHANG causes the
 | 
			
		||||
 * Option bits for the third argument of wait4.  WNOHANG causes the
 | 
			
		||||
 * wait to not hang if there are no stopped or terminated processes, rather
 | 
			
		||||
 * returning an error indication in this case (pid==0).  WUNTRACED
 | 
			
		||||
 * indicates that the caller should receive status about untraced children
 | 
			
		||||
@ -80,18 +79,108 @@
 | 
			
		||||
#define WNOHANG		0x00000001	/* don't hang in wait */
 | 
			
		||||
#define WUNTRACED	0x00000002	/* tell about stopped,
 | 
			
		||||
					   untraced children */
 | 
			
		||||
#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
 | 
			
		||||
#define	WALTSIG		0x00000004	/* wait for processes that exit
 | 
			
		||||
					   with an alternate signal (i.e.
 | 
			
		||||
					   not SIGCHLD) */
 | 
			
		||||
#define	WALLSIG		0x00000008	/* wait for processes that exit
 | 
			
		||||
					   with any signal, i.e. SIGCHLD
 | 
			
		||||
					   and alternates */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * These are the Linux names of some of the above flags, for compatibility
 | 
			
		||||
 * with Linux's clone(2) API.
 | 
			
		||||
 */
 | 
			
		||||
#define	__WCLONE	WALTSIG
 | 
			
		||||
#define	__WALL		WALLSIG
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * These bits are used in order to support SVR4 (etc) functionality
 | 
			
		||||
 * without replicating sys_wait4 5 times.
 | 
			
		||||
 */
 | 
			
		||||
#define	WNOWAIT		0x00010000	/* Don't mark child 'P_WAITED' */
 | 
			
		||||
#define	WNOZOMBIE	0x00020000	/* Ignore zombies */
 | 
			
		||||
#define	WOPTSCHECKED	0x00040000	/* Compat call, options verified */
 | 
			
		||||
#endif /* _XOPEN_SOURCE || _NETBSD_SOURCE */
 | 
			
		||||
 | 
			
		||||
#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
 | 
			
		||||
/* POSIX extensions and 4.2/4.3 compatibility: */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Tokens for special values of the "pid" parameter to waitpid.
 | 
			
		||||
 * Tokens for special values of the "pid" parameter to wait4.
 | 
			
		||||
 */
 | 
			
		||||
#define	WAIT_ANY	(-1)	/* any process */
 | 
			
		||||
#define	WAIT_MYPGRP	0	/* any process in my process group */
 | 
			
		||||
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Deprecated:
 | 
			
		||||
 * Structure of the information in the status word returned by wait4.
 | 
			
		||||
 * If w_stopval==WSTOPPED, then the second structure describes
 | 
			
		||||
 * the information returned, else the first.
 | 
			
		||||
 */
 | 
			
		||||
union wait {
 | 
			
		||||
	int	w_status;		/* used in syscall */
 | 
			
		||||
	/*
 | 
			
		||||
	 * Terminated process status.
 | 
			
		||||
	 */
 | 
			
		||||
	struct {
 | 
			
		||||
#if BYTE_ORDER == LITTLE_ENDIAN
 | 
			
		||||
		unsigned int	w_Termsig:7,	/* termination signal */
 | 
			
		||||
				w_Coredump:1,	/* core dump indicator */
 | 
			
		||||
				w_Retcode:8,	/* exit code if w_termsig==0 */
 | 
			
		||||
				w_Filler:16;	/* upper bits filler */
 | 
			
		||||
#endif
 | 
			
		||||
#if BYTE_ORDER == BIG_ENDIAN
 | 
			
		||||
		unsigned int	w_Filler:16,	/* upper bits filler */
 | 
			
		||||
				w_Retcode:8,	/* exit code if w_termsig==0 */
 | 
			
		||||
				w_Coredump:1,	/* core dump indicator */
 | 
			
		||||
				w_Termsig:7;	/* termination signal */
 | 
			
		||||
#endif
 | 
			
		||||
	} w_T;
 | 
			
		||||
	/*
 | 
			
		||||
	 * Stopped process status.  Returned
 | 
			
		||||
	 * only for traced children unless requested
 | 
			
		||||
	 * with the WUNTRACED option bit.
 | 
			
		||||
	 */
 | 
			
		||||
	struct {
 | 
			
		||||
#if BYTE_ORDER == LITTLE_ENDIAN
 | 
			
		||||
		unsigned int	w_Stopval:8,	/* == W_STOPPED if stopped */
 | 
			
		||||
				w_Stopsig:8,	/* signal that stopped us */
 | 
			
		||||
				w_Filler:16;	/* upper bits filler */
 | 
			
		||||
#endif
 | 
			
		||||
#if BYTE_ORDER == BIG_ENDIAN
 | 
			
		||||
		unsigned int	w_Filler:16,	/* upper bits filler */
 | 
			
		||||
				w_Stopsig:8,	/* signal that stopped us */
 | 
			
		||||
				w_Stopval:8;	/* == W_STOPPED if stopped */
 | 
			
		||||
#endif
 | 
			
		||||
	} w_S;
 | 
			
		||||
};
 | 
			
		||||
#define	w_termsig	w_T.w_Termsig
 | 
			
		||||
#define w_coredump	w_T.w_Coredump
 | 
			
		||||
#define w_retcode	w_T.w_Retcode
 | 
			
		||||
#define w_stopval	w_S.w_Stopval
 | 
			
		||||
#define w_stopsig	w_S.w_Stopsig
 | 
			
		||||
 | 
			
		||||
#define	WSTOPPED	_WSTOPPED
 | 
			
		||||
#endif /* _XOPEN_SOURCE || _NETBSD_SOURCE */
 | 
			
		||||
 | 
			
		||||
#ifndef _KERNEL
 | 
			
		||||
#include <sys/cdefs.h>
 | 
			
		||||
 | 
			
		||||
__BEGIN_DECLS
 | 
			
		||||
struct rusage;	/* forward declaration */
 | 
			
		||||
 | 
			
		||||
pid_t	wait(int *);
 | 
			
		||||
pid_t	waitpid(pid_t, int *, int);
 | 
			
		||||
#if defined(_XOPEN_SOURCE) || defined(_NETBSD_SOURCE)
 | 
			
		||||
#ifndef __LIBC12_SOURCE__
 | 
			
		||||
pid_t	wait3(int *, int, struct rusage *) __RENAME(__wait350);
 | 
			
		||||
pid_t	wait4(pid_t, int *, int, struct rusage *) __RENAME(__wait450);
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
__END_DECLS
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* !_SYS_WAIT_H_ */
 | 
			
		||||
 | 
			
		||||
@ -47,7 +47,7 @@ basic_test(void)
 | 
			
		||||
	snprintf(cmd_buf, sizeof(cmd_buf), "mount -t ntfs-3g %s %s %s",
 | 
			
		||||
		RAMDISK, TESTMNT, SILENT);
 | 
			
		||||
	status = system(cmd_buf);
 | 
			
		||||
	if (WEXITSTATUS(status != 0))
 | 
			
		||||
	if (WEXITSTATUS(status) != 0)
 | 
			
		||||
		bomb("Unable to mount NTFS partition (1)");
 | 
			
		||||
 | 
			
		||||
	/* Open file and verify contents */
 | 
			
		||||
@ -98,7 +98,7 @@ create_partition(void)
 | 
			
		||||
	snprintf(mntcmd, sizeof(mntcmd), "mount -t ntfs-3g %s %s %s",
 | 
			
		||||
		RAMDISK, TESTMNT, SILENT);
 | 
			
		||||
	status = system(mntcmd);
 | 
			
		||||
	if (WEXITSTATUS(status != 0))
 | 
			
		||||
	if (WEXITSTATUS(status) != 0)
 | 
			
		||||
		bomb("Unable to mount NTFS partition (1)");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user