日期:2014-05-16  浏览次数:20608 次

exec()族函数的问题
我从书上看到exec()函数族是用来创建一个新进程的。使用exec()比较普遍的一种方法是先使用fork()函数分叉进程,然后在新的进程中调用exec()函数,这样exec()会占用与原来一样的系统资源来运行。
现在我有一个问题是:如果用exec()函数创建的新的进程所需要的系统资源要比原来的系统资源多的话,那新的进程是不是就无法创建成功了?如果是这样的话,我要创建一个很大的进程,那怎么办?

------解决方案--------------------
    exec函数族的函数执行成功后不会返回,因为调用进程的实体,包括代码段,数据段和堆栈等都已经被新的内容取代,只留下进程ID等一些表面上的信息仍保持原样,所以你有点误解了。
    fork之后假设有A和B两个进程,A和B的进程资源是一样的,但是当B调用exec("X")之后,B的进程资源会被新的进程(也就是X)所取代,以后B的内容就变为X的实例了。
------解决方案--------------------
fork函数复制一进程的。所以调用fork后系统是两个一样的进程,如果其中的一个进程调用exec那么以前那个进程信息及资源都会释放,操作系统再重新为新的进程申请资源的