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;
}
|
因此,以上推论是正确的