int my_system(char* cmd)
{
int status = 0;
pid_t pid;
if ((pid = vfork()) <0)
{
status = -1;
}
else if (pid==0)
{
const char *new_argv[4];
struct sigaction sa_cld;
sa_cld.sa_handler = SIG_DFL;
sa_cld.sa_flags = 0;
/* 在子进程中放开SIGINT信号 */
sigemptyset(&sa_cld.sa_mask);
sigaction (SIGINT, &sa_cld, NULL);
sigaction (SIGQUIT, &sa_cld, NULL);
new_argv[0] = "sh";
new_argv[1] = "-c";
new_argv[2] = cmd;
new_argv[3] = NULL;
//execl("/bin/sh","sh","-c" ,cmd,(char *)0);
if (execve("/bin/sh",(char *const *) new_argv, NULL) <0)
{
printf("fail to execve %s! errno: %d\n",cmd);
exit(1);
}
else
{
exit(0);
}
}
else
{
waitpid(pid,&status,0);
}
retu