zoukankan      html  css  js  c++  java
  • linux中execve函数的用法

    在父进程中fork一个子进程,在子进程中调用exec函数启动新的程序。exec函数一共有六个,其中execve为内核级系统调用,其他(execl,execle,execlp,execv,execvp)都是调用execve的库函数。

    #include<unistd.h>

    函数定义 int execve(const char *filename, char *const argv[ ], char *const envp[ ]);

    返回值 函数执行成功时没有返回值,执行失败时的返回值为-1.

    函数说明 execve()用来执行参数filename字符串所代表的文件路径,第二个参数是利用数组指针来传递给执行文件,并且需要以空指针(NULL)结束,最后一个参数则为传递给执行文件的新环境变量数组。

    1. #include<unistd.h>   
    2. main()   
    3. {   
    4.   char *argv[ ]={"ls", "-al", "/etc/passwd", NULL};   
    5.   char *envp[ ]={"PATH=/bin", NULL}   
    6.   execve("/bin/ls", argv, envp);   
    7. }  

    运行结果为:-rw-r--r-- 1 root root 1659 Feb 27 20:13 /etc/passwd

    这与在bin目录下执行 ls -al /etc/passwd 所得到的结果是一样的。

    linux fork()和execve()的区别

    fork是分身,execve是变身。

     exec系列的系统调用是把当前程序替换成要执行的程序,而fork用来产生一个和当前进程一样的进程(虽然通常执行不同的代码流)。通常运行另一个程序,而同时保留原程序运行的方法是,fork+exec。

    看看手册里面的例子就知道怎么用了。

    exec系列的系统调用已经是变成别的程序了,已经和本程序无关了

  • 相关阅读:
    clock时钟
    Excel一对多查找
    tcl概述
    Linux命令(一)
    perl合并文件
    数字IC设计工程师的知识结构
    阿里云ECS专有网络下安装flannel注意事项
    阿里云kubernetes遭入侵pubg进程占用cpu资源100%解决方法
    JSON Web Tokens测试工具
    Linux搭建Node.js环境
  • 原文地址:https://www.cnblogs.com/jxhd1/p/6706701.html
Copyright © 2011-2022 走看看