exec和system的区别

一、exec与system的区别

(1) exec是直接用新的进程去代替原来的程序运行,运行完毕之后不回到原先的程序中去。

(2) system是调用shell执行你的命令,system=fork+exec+waitpid,执行完毕之后,回到原先的程序中去。继续执行下面的部分。

总之,如果你用exec调用,首先应该fork一个新的进程,然后exec. 而system不需要你fork新进程,已经封装好了。

https://blog.csdn.net/pzqingchong/article/details/78976508

https://blog.csdn.net/wwang196988/article/details/6748282

 

二、获取system的返回值和脚本的返回值

system会将fork+exec的结果放在返回值的低8位,将脚本的返回值放在高8位。

建议用系统函数进行转换:shell执行结果的返回值:IFEXITED(status)。脚本的返回值:WEXITSTATUS(status) 

https://blog.csdn.net/weixin_39094034/article/details/105809444

 

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>  
#include <string.h>
 
int main()
{

    char path[256]={0};
    getcwd(path,256); 
    strcat(path,"/mytest");
    int status = system(path);
    printf("system return value =%d, shell return value=%d \n",WIFEXITED(status),WEXITSTATUS(status)); 

    
     getcwd(path,256); 
    strcat(path,"/mytest 102");
    status = system(path);
    printf("system return value =%d, shell return value=%d \n",WIFEXITED(status),WEXITSTATUS(status)); 

}

  

 

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv)
{
    if(argc==1)return 100;
    else return atoi(argv[1]);

}

  

parallels@parallels-Parallels-Virtual-Platform:~/Desktop/LinuxC/System$ ./mySystem 
raw return value=6400,system return value =1, shell return value=100 
raw return value=6600,system return value =1, shell return value=102 

  

 

上一篇:技术分享| Sip与WebRTC互通-SRProxy开源库讲解


下一篇:linux--exec命令