execl系列函数特点,以及与system的区别
2008-12-09 11:56
344 查看
Linux系统下execl函数特点:
当进程调用一种exec函数时,该进程完全由新程序代换,而新程序则从其main函数开始执行。因为调用exec并不创建新进程,所以前后的进程ID并未改变。exec只是用另一个新程序替换了当前进程的正文、数据、堆和栈段。
特点1.前后进程ID未改变,所以我们可以向该ID发送消息,控制一个不相关的可执行文件。
pid_t child_id;
{
pid_t pid;
pid = fork();
if(pid > 0)
{
child_id = pid;
}
else if(pid == 0)
{
execl("./printhello","printhello", (char*)0);
}
}
别的函数中,可以发送:
{
kill(child_id, SIGKILL);
}
这样,就可以退出printhello的执行了。
如果用system,system调用的进程与fork的子进程不再是同一进程,就不能通过这种简便的方式控制到位。
二、用另一个新程序替换了当前进程的正文、数据、堆和栈段。
当前进程的正文都被替换了,那么execl后的语句,即便execl退出了,都不会被执行。
比如:
int main()
{
execl("/bin/ls","ls", (char*)0);
printf("ls files end/n");
}
printf就不会再被调用。
当进程调用一种exec函数时,该进程完全由新程序代换,而新程序则从其main函数开始执行。因为调用exec并不创建新进程,所以前后的进程ID并未改变。exec只是用另一个新程序替换了当前进程的正文、数据、堆和栈段。
特点1.前后进程ID未改变,所以我们可以向该ID发送消息,控制一个不相关的可执行文件。
pid_t child_id;
{
pid_t pid;
pid = fork();
if(pid > 0)
{
child_id = pid;
}
else if(pid == 0)
{
execl("./printhello","printhello", (char*)0);
}
}
别的函数中,可以发送:
{
kill(child_id, SIGKILL);
}
这样,就可以退出printhello的执行了。
如果用system,system调用的进程与fork的子进程不再是同一进程,就不能通过这种简便的方式控制到位。
二、用另一个新程序替换了当前进程的正文、数据、堆和栈段。
当前进程的正文都被替换了,那么execl后的语句,即便execl退出了,都不会被执行。
比如:
int main()
{
execl("/bin/ls","ls", (char*)0);
printf("ls files end/n");
}
printf就不会再被调用。
相关文章推荐
- 也许是你一直没有弄懂的问题系列之<函数的形参和实参特点及区别>
- 区别client、offset、scroll系列以及event的几个距离属性
- ORACLE内部函数大全以及与SQLSERVER的区别
- javascript入门系列演示·函数的定义以及简单参数使用,调用函数 .txt
- 内置函数特点与define函数区别
- C#知识点总结系列:4、C#中Monitor和Lock以及区别
- <Linux>Ubuntu-gcc编译器无法编译sqrt函数和aqrtf函数的解决方法以及sqrt和aqrtf函数的区别
- c++ static的作用,以及static对象在类和函数中区别
- Django中URL的相关配置以及后台函数常见设置(Django系列6)
- Spring中ClassPathXmlApplicationContext类的使用,以及与FileSystemXmlApplicationContext的区别
- js特点以及和Java的区别
- getchar()和system(“pause”)让程序暂停的区别以及getchar()获取字符的方式
- socket通信网络模型 ——Epoll、IOCP模型详解以及与select、kqueue等常见模型的区别特点
- Mybatis整理系列(01)————传入参数方式以及#{}与${}的区别
- 每天学习一算法系列(3)(设计包含min函数的栈,要求函数min、push以及pop的时间复杂度都是O(1))
- Python: 函数与方法的区别 以及 Bound Method 和 Unbound Method
- ruby gsub gsub! chomp chomp! 以及所有类似函数用法及区别
- OC中方法与函数的区别以及类的合理设计
- 【Cocos2d-X(2.x) 游戏开发系列之一】cocos2dx(v2.x)与(v1.x)的一些常用函数区别讲解!在2.x版CCFileData类被去除等
- 函数调用的区别:_cdecl以及_stdcall