众所周知,linux下面的system(command)函数的过程是,创建一个新的进程来执行 /bin/sh -c command,作用相当于在终端敲入command命令。
我的问题来了,如果是是创建一个新进程的话,原进程与新进程是什么关系呢?会不会出现这样的情况:我新的进程需要在system参数中的command命令执行之后才能继续,但是由于进程调度的关系,谁先谁后未知。
呵呵,其实我们多虑了,看了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; }
|
我的验证代码如下:
会等待3秒之后才会打印出东西:
#include <stdio.h> #include <stdlib.h> int main(){ system("sleep 3"); printf("after system()"); return 0; }
|
因此,以上推论是正确的
阅读(4101) | 评论(0) | 转发(0) |