Linux system函数,linux的system命令
ignore.sa _ handler=SIG _ IGN/*忽略信号情报和SIGQUIT */
sigemptyset(忽略。sa _ mask);
忽略。sa _ flags=0;
if (sigaction(SIGINT,ignore,saveintr) 0)
return(-1);
if (sigaction(SIGQUIT,ignore,savequit) 0)
return(-1);
sigemptyset(chldmask);/*现在阻止SIGCHLD */
sigaddset( chldmask,SIGCHLD);
if (sigprocmask(SIG_BLOCK,chldmask,savemask) 0)
return(-1);
if ((pid=fork()) 0) {
状态=-1;/*可能超出进程*/
} else if (pid==0) { /* child */
/*恢复以前的信号操作,重置信号屏蔽*/
sigaction(SIGINT,saveintr,NULL);
sigaction(SIGQUIT,savequit,NULL);
sigprocmask(SIG_SETMASK,savemask,NULL);
execl(/bin/sh , sh ,-c ,cmdstring,(char *)0);
_ exit(127);/*执行错误*/
} else { /* parent */
while (waitpid(pid,status,0) 0)
如果(errno!=EINTR) {
状态=-1;/*等待PID()*/中除此调用被信号所中断以外的错误
打破;
/*恢复以前的信号操作,重置信号屏蔽*/
if (sigaction(SIGINT,saveintr,NULL) 0)
return(-1);
if (sigaction(SIGQUIT,savequit,NULL) 0)
return(-1);
if (sigprocmask(SIG_SETMASK,savemask,NULL) 0)
return(-1);
返回(状态);