【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函数详解
**************************************************************************************************** ...
随机推荐
- day35-常见内置模块四(logging模块)
一.函数式简单配置(低配) 1.只能在屏幕上显示,或者写入文件,不能同时进行 import logging logging.debug('调试') logging.info('正常运行') loggi ...
- DOM节点的增删改查以及class属性的操作
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Unicode UTF8 UTF16 urlencode base64
Unicode:是一个字符集,每个字符对应一个唯一的unicode编码,一般是16位. UTF8是针对Unicode的编码方式,因为如果每个字符都用unicode的编码存储的话会很浪费空间,比如说as ...
- cxGrid 颜色设置
一.cxGrid 根据列值变色(样式) 在使用cxGrid的过程中,某一个单元格经常需要根据其他单元格的值来做相应的变色,如: 在cxGridDBTableView中,选定要变样式(如背景色.字体属性 ...
- VULKAN学习资料收集
https://github.com/vinjn/awesome-vulkan 张静初 https://zhuanlan.zhihu.com/p/24798656 知乎 https://develop ...
- while 循环居然可以用else
while 循环居然可以用else python 3 while a<50: print a a=a+1 else: print"over."
- Haskell语言开发工具
Stack How to Script with Stack Originate Guides - Haskell Tool Stack 配置 Intellij Idea IntelliJ plugi ...
- LeetCode OJ 49. Group Anagrams
题目 Given an array of strings, group anagrams together. For example, given: ["eat", "t ...
- 30.深入理解abstract class和interface
- 吴裕雄 python oracle检索数据(2)
import cx_Oracle conn = cx_Oracle.connect("scott/admin@localhost:1521/orcl")cursor = conn. ...