Linux进程

来源:互联网 发布:淘宝9块9包邮专区 编辑:程序博客网 时间:2024/05/23 22:21


调用fork后,A进程和B进程的PC都指向下一个printf,也就是说,fork后子进程和父进程从相同的点开始执行代价。

fork出来的子进程是父进程的副本,也就是说其实copy了一份父进程,当然在子进程写数据之前,子进程一直是和父进程使用同样的资源,但是当子进程进行写数据的时候,子进程就会copy一份父进程的资源,然后进行数据的读写,这就是传说中的copy-on-write.

2:进程之exec

    如果只有fork去创建新的进程,那linux的性能就会有影响,因为fork出来的进程建立的事parent的副本。

幸好linux提供了exec系列,exec系列用于提供新程序的运行。exec系统调用都有相同的功能:把一个新程序的装入调用进程的内存空间,来改变调用进程的执行代码,从而形成新进程。当然如果exec执行成功,调用进程将被覆盖,从新进程的入口开始执行,这样就产生了一个新进程,但是新进程的进程标示符仍然和调用进程(也就是原进程)相同。也就是说exec执行后并没有创建并发的新进程,而是用新进程取代了旧进程。所以,exec执行后没有任何数据返回。如果有数据返回说明调用失败了,所以一般在调用exec后会有perror来提示调用失败。