xref: /original-bsd/lib/libc/stdlib/system.c (revision 6c57d260)
1 /* @(#)system.c	4.1 (Berkeley) 12/21/80 */
2 #include	<signal.h>
3 
4 system(s)
5 char *s;
6 {
7 	int status, pid, w;
8 	register int (*istat)(), (*qstat)();
9 
10 	if ((pid = vfork()) == 0) {
11 		execl("/bin/sh", "sh", "-c", s, 0);
12 		_exit(127);
13 	}
14 	istat = signal(SIGINT, SIG_IGN);
15 	qstat = signal(SIGQUIT, SIG_IGN);
16 	while ((w = wait(&status)) != pid && w != -1)
17 		;
18 	if (w == -1)
19 		status = -1;
20 	signal(SIGINT, istat);
21 	signal(SIGQUIT, qstat);
22 	return(status);
23 }
24