【Linux 进程】exec族函数详解
exec函数族关系:
事实上,这6个函数中真正的系统调用只有execve,其他5个都是库函数,它们最终都会调用execve这个系统调用,调用关系如下图所示:

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif #include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h> int main(int argc, char *argv[])
{
//以NULL结尾的字符串数组的指针,适合包含v的exec函数参数
char *arg[] = {"ls", "-a", NULL}; /**
17 * 创建子进程并调用函数execl
18 * execl 中希望接收以逗号分隔的参数列表,并以NULL指针为结束标志
19 */
if( fork() == )
{
// in clild
printf( "1------------execl------------\n" );
if( execl( "/bin/ls", "ls","-a", NULL ) == - )
{
perror( "execl error " );
exit();
}
} /**
32 *创建子进程并调用函数execv
33 *execv中希望接收一个以NULL结尾的字符串数组的指针
34 */
if( fork() == )
{
// in child
printf("2------------execv------------\n");
if( execv( "/bin/ls",arg) < )
{
perror("execv error ");
exit();
}
} /**
47 *创建子进程并调用 execlp
48 *execlp中
49 *l希望接收以逗号分隔的参数列表,列表以NULL指针作为结束标志
50 *p是一个以NULL结尾的字符串数组指针,函数可以DOS的PATH变量查找子程序文件
51 */
if( fork() == )
{
// in clhild
printf("3------------execlp------------\n");
if( execlp( "ls", "ls", "-a", NULL ) < )
{
perror( "execlp error " );
exit();
}
} /**
64 *创建子里程并调用execvp
65 *v 望接收到一个以NULL结尾的字符串数组的指针
66 *p 是一个以NULL结尾的字符串数组指针,函数可以DOS的PATH变量查找子程序文件
67 */
if( fork() == )
{
printf("4------------execvp------------\n");
if( execvp( "ls", arg ) < )
{
perror( "execvp error " );
exit( );
}
} /**
79 *创建子进程并调用execle
80 *l 希望接收以逗号分隔的参数列表,列表以NULL指针作为结束标志
81 *e 函数传递指定参数envp,允许改变子进程的环境,无后缀e时,子进程使用当前程序的环境
82 */
if( fork() == )
{
printf("5------------execle------------\n");
if( execle("/bin/ls", "ls", "-a", NULL, NULL) == - )
{
perror("execle error ");
exit();
}
} /**
94 *创建子进程并调用execve
95 * v 希望接收到一个以NULL结尾的字符串数组的指针
96 * e 函数传递指定参数envp,允许改变子进程的环境,无后缀e时,子进程使用当前程序的环境
97 */
if( fork() == )
{
printf("6------------execve-----------\n");
if( execve( "/bin/ls", arg, NULL ) == )
{
perror("execve error ");
exit();
}
}
return EXIT_SUCCESS;
}
运行结果:
------------execl------------
. .. .deps exec exec.o .libs Makefile
------------execv------------
. .. .deps exec exec.o .libs Makefile
------------execlp------------
. .. .deps exec exec.o .libs Makefile
------------execvp------------
. .. .deps exec exec.o .libs Makefile
------------execle------------
. .. .deps .libs Makefile exec exec.o
------------execve-----------
. .. .deps .libs Makefile exec exec.o
整理于百度百科 & https://blog.csdn.net/zjwson/article/details/53337212
【Linux 进程】exec族函数详解的更多相关文章
- exec族函数详解及循环创建子进程
前言:之前也知道exec族函数,但没有完全掌握,昨天又重新学习了一遍,基本完全掌握了,还有一些父子进程和循环创建子进程的问题,还要介绍一下环境变量,今天分享一下. 一.环境变量 先介绍下环境的概念和特 ...
- 【Linux 进程】fork函数详解
一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同, ...
- Linux进程上下文切换过程context_switch详解--Linux进程的管理与调度(二十一)
1 前景回顾 1.1 Linux的调度器组成 2个调度器 可以用两种方法来激活调度 一种是直接的, 比如进程打算睡眠或出于其他原因放弃CPU 另一种是通过周期性的机制, 以固定的频率运行, 不时的检测 ...
- Linux C 中 fork() 函数详解
一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork() 函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同 ...
- Linux 系统 文件锁 fcntl函数详解
#include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd); int fcntl(int fd, int ...
- exce族函数详解
exec函数族 函数族说明 fork() 函数用于创建一个新的子进程,该子进程几乎复制了父进程的全部内容,但是,这个新创建的子进程如何执行呢?exec 函数族就提供了一个在进程中启动另一个程序执行的方 ...
- (笔记)Linux下的ioctl()函数详解
我这里说的ioctl函数是指驱动程序里的,因为我不知道还有没有别的场合用到了它,所以就规定了我们讨论的范围.写这篇文章是因为我前一阵子被ioctl给搞混了,这几天才弄明白它,于是在这里清理一下头脑. ...
- [fork]Linux中的fork函数详解
---------------------------------------------------------------------------------------------------- ...
- Linux内核中kzalloc函数详解
**************************************************************************************************** ...
随机推荐
- db连接驱动
1.oracle 驱动jar包-->ojdbc6.jar 驱动类-->oracle.jdbc.driver.OracleDriver 驱动连接--> 第一种:jdbc:oracle: ...
- 注解(annotation)
目录 JAVA注解 SpringMVC注解 RestEasy注解 JSON注解 java注解 SpringMVC注解 restEasy注解 Json注解: @JsonInclude(JsonIncl ...
- Python中的元类(译)
add by zhj: 这是大stackoverflow上一位小白提出的问题,好吧,我承认我也是小白,元类这块我也是好多次想搞明白, 但终究因为太难懂而败下阵来.看了这篇文章明白了许多,再加下啄木鸟社 ...
- js数组方法解析
js 数组有很多方法,其中有的常用,有的不常用,归纳几个常用的方法,做个总结: 1. 转换方法: 1.1 valueOf():调用这个方法会返回数组本身 <script> var arr ...
- sublime text3:快捷键
1.就近选择相同项:ctrl+d,按住ctrl,然后多次按d,就不断往下选择相同项 2.选择所有匹配项:alt+f3,一次性选中所有匹配项 3.ctrl+shift+a:在html中同时按这三个键,则 ...
- join和子查询的一点点思考
代码和表设计过程中,为了考虑数据库的范式,通常导致需要join多张表或子查询, 如报表场景, 可此种方式在大数据量的 情况下,效率较低. 如果能做适量的数据冗余,便可以减少join或子查询,效率较高 ...
- Visual SVN Server备份脚本
set tt=%date:~0,4%%date:~5,2%%date:~8,2% mkdir D:\SVN_BACKUP_%tt%\Repositories xcopy C:\Repositories ...
- 一个有趣的nginx问题引发的小问题
最近处理一个nginx问题,故障现象是:所有的work进程,都在等锁.调用的是sem_wait 根据对应的堆栈,查看一下大家等的锁都一样,看看这把锁被谁拿了: 锁的结构是: typedef struc ...
- where后一个条件和多个条件的查询速度
如果记录中有两个都是 唯一标识的 ,那是都where and 还是只写一个比较快 ---- 一个快
- elk日志平台搭建小记
最近抽出点时间,搭建了新版本的elk日志平台 elastaicsearch 和logstash,kibana和filebeat都是5.6版本的 中间使用redis做缓存,版本为3.2 使用的系统为ce ...