exec 函数
exec()函数通过运行其他程序来替换当前进程。
新程序启动后PID和老程序一样,就像两个程序接力跑,你的程序把进程交接给了新程序。
exec函数众多,可以分为两种类型
- 列表函数
- 数组函数
列表函数
execl()
execlp()
execle()
以上三个函数以参数列表的形式接收命令行参数
参数
程序
第一个参数告诉exec() 函数将运行什么程序。 对 execl()
或 execle()
来说就是程序的绝对路径。
对 execlp()
来讲就是程序的名字,它会根据名字来查找程序。
命令行参数
需要列出想使用的命令行参数
NULL
最后一个命令行参数借宿后需要加上NULL,告诉函数没有其他参数了
环境变量(如果有的话)
如果调用了以…e()结尾的exec()函数,还可以传递环境变量数组 。
示例
数组函数
execv()
execvp()
execve()
数组函数将命令行参数保存在数组中
ps:上面两个函数唯一的区别就是execvp会从PATH中查找程序
总结
返回值
以上六个函数,若失败则返回-1, 若失败则不返回
代码示例
test.c
#include
#include
#include
#include
#include
int main(void)
{
pid_t pid = -1;
pid = fork();
if (pid > 0)
{
// 父进程
printf("parent, 子进程id = %d\n", pid);
}
else if (pid == 0)
{
printf("执行子进程\n");
execl("/usr/bin/ls", "ls", "-l", NULL);
return 0;
}
else
{
perror("fork");
return -1;
}
return 0;
}
运行结果
Original: https://www.cnblogs.com/wojiuyishui/p/16670077.html
Author: 我就一水
Title: exec
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578650/
转载文章受原作者版权保护。转载请注明原作者出处!