fork,vfork以及exec的意义

简介:
linux中创建进程是直接的,就是简单的一个fork调用,linux认为进程就是执行的一个任务,并没有和可执行文件联系起来,如果非要和可执行文件 联系的话就要涉及到另一个系统调用exec.linux这么实现取得了很大的灵活性,这个灵活性实际上也是继承unix的,因为unix就是这样实现进程的,进程在unix或者类unix比如linux系统中就是一个执行续,而不是别的什么特殊的东西,这使得在这些系统中很容易就实现了线程的概念,而且可 以用统一的管理系统去管理线程或者进程,所不同的仅仅是进程拥有另外一些东西而线程却没有,线程成了进程的完全子集,这在设计上是很重要的.相 反,windows内核虽然完全实现了线程,但是它实现的线程却和进程的概念是完全分离的,唯一的相同点就是都是nt执行体的"可执行"对象,统一于对象 管理器,继承了可执行对象的一切特性.这样windows实现的现代进程和线程的概念就相当松散,不利于统一管理,这完全体现在用户接口上,我们看一下 windows的进程创建接口; 
BOOL CreateProcess 

LPCTSTR lpApplicationName, 
LPTSTR lpCommandLine, 
LPSECURITY_ATTRIBUTES lpProcessAttributes。 
LPSECURITY_ATTRIBUTES lpThreadAttributes, 
BOOL bInheritHandles, 
DWORD dwCreationFlags, 
LPVOID lpEnvironment, 
LPCTSTR lpCurrentDirectory, 
LPSTARTUPINFO lpStartupInfo, 
LPPROCESS_INFORMATION lpProcessInformation 
); 
这 里仅仅给出接口声明和简单的解释,更详细的请查阅MSDN,第一个参数是可执行模块的名称字符串,第二个是命令行,...就不多说了,看得晕吗?我是不喜 欢这种方式了,为什么进程一定要有可执行模块?去问微软吧!这也可能是微软的策略,故意让你进入他自己的开发模式,然后上瘾然后你就离不开微软了...; 再看一眼它的线程创建接口: 
HANDLE CreateThread( 
LPSECURITY_ATTRIBUTES lpThreadAttributes, 
DWORD dwStackSize, 
LPTHREAD_START_ROUTINE lpStartAddress, 
LPVOID lpParameter, 
DWORD dwCreationFlags, 

LPDWORD lpThreadId 



 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1273438

相关文章
|
7月前
|
数据可视化 项目管理 开发工具
|
9月前
|
Linux
Linux系统应用编程---进程原语(fork、exec、wait&waitpid)
Linux系统应用编程---进程原语(fork、exec、wait&waitpid)
105 0
|
Linux 调度
vfork() 函数
vfork() 函数
51 0
|
算法 物联网 Linux
创建进程 fork 函数|学习笔记
快速学习创建进程 fork 函数
145 0
创建进程 fork 函数|学习笔记
|
Linux
Linux系统编程-进程创建(fork)、外部程序调用(exec)
在linux中fork函数是非常重要的函数,它可以从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。
483 0
|
Linux
关于signal和fork的思考
fork可以在linux中创建子进程。先看man手册里面的东西: SYNOPSIS       #include        pid_t fork(void);DESCRIPTION       fork()  creates  a new process by duplicating the calling process.
1184 0
|
Linux 调度
Linux进程的创建函数fork()及其fork内核实现解析【转】
转自:http://www.cnblogs.com/zengyiwen/p/5755193.html 进程的创建之fork() Linux系统下,进程可以调用fork函数来创建新的进程。调用进程为父进程,被创建的进程为子进程。
1353 0
|
Unix
《UNIX网络编程 卷2:进程间通信(第2版)》——1.5 fork、exec和exit对IPC对象的影响
表中多数特性将在以后的章节中讲述,不过我们需要强调几点。首先,考虑到无名同步变量(互斥锁、条件变量、读写锁、基于内存的信号量),从一个具有多个线程的进程中调用fork将变得混乱不堪。[Butenhof 1997]的6.1节提供了其中的细节。
1860 0
创建进程:fork/exec
#include int execl(const char *path, const char *arg, ...);int execlp(const char *file, const char *arg, .
893 0
|
Linux
linux用户栈内核栈的设置---进程的创建: fork/execve【转】
转自:http://blog.csdn.net/u011279649/article/details/18795547   版权声明:本文为博主原创文章,未经博主允许不得转载。 目录(?)[-] 应用层怎样使用fork and execve fork的返回值怎样区分0pid fo...
857 0

热门文章

最新文章