9 int wait_val
, wait_ret
, pid
;
10 __sighandler_t save_quit
;
11 __sighandler_t save_int
;
13 if( command
== 0 ) return 1;
15 save_quit
= signal(SIGQUIT
, SIG_IGN
);
16 save_int
= signal(SIGINT
, SIG_IGN
);
18 if( (pid
=vfork()) < 0 )
20 signal(SIGQUIT
, save_quit
);
21 signal(SIGINT
, save_int
);
26 signal(SIGQUIT
, SIG_DFL
);
27 signal(SIGINT
, SIG_DFL
);
29 execl("/bin/sh", "sh", "-c", command
, (char*)0);
32 /* Signals are not absolutly guarenteed with vfork */
33 signal(SIGQUIT
, SIG_IGN
);
34 signal(SIGINT
, SIG_IGN
);
38 if( (wait_ret
= wait(&wait_val
)) == -1 )
44 while( wait_ret
!= pid
);
46 signal(SIGQUIT
, save_quit
);
47 signal(SIGINT
, save_int
);