Chinaunix首页 | 论坛 | 博客
  • 博客访问: 61755
  • 博文数量: 12
  • 博客积分: 1586
  • 博客等级: 上尉
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-17 13:25
文章分类
文章存档

2012年(1)

2011年(1)

2010年(10)

分类: LINUX

2010-05-18 17:54:54

众所周知,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) |
给主人留下些什么吧!~~