system函数的实现源码,看到父进程是在子进程执行完成之后才继续往下走,否则一直挂在那等的子进程执行完。
int system(const char * cmdstring) { pid_t pid; int status; if(cmdstring == NULL){ return (1); } if((pid = fork())<0){ status = -1; } else if(pid == 0){ execl("/bin/sh", "sh", "-c", cmdstring, (char *)0); -exit(127); //子进程正常执行则不会执行此语句 } else{ while(waitpid(pid, &status, 0) < 0){ if(errno != EINTER){ status = -1; break; } } } return status; } |
验证:
#include <stdio.h> #include <stdlib.h> int main(){ system("sleep 3"); printf("after system()"); return 0; } |
因此,以上推论是正确的