除了使用fork产生子进程,还有其它的方法吗?子进程可以访问父进程的变量吗?

除了使用fork产生子进程,还有其它的方法吗?

我当时说没有了,竟然把vfork()给忘记了。vfork()函数的调用序列和返回值与fork相同,同样可以创建一个新进程,但两者的语义不同。
vfork()与fork的区别有二:
(1)vfork出的子进程不拷贝父进程的地址空间,即使父进程的数据被修改。新进程的目的是exec一新程序。
(2)在vfork调用中,子进程先运行,父进程挂起,直到子进程调用exec或exit,在这以后,父子进程的执行顺序不再有限制。如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。

子进程可以访问父进程的变量吗?

子进程可以访问父进程变量。子进程“继承”父进程的数据空
间,堆和栈,其地址总是一样的,因为在fork时整个虚拟地址空间被复制,但是虚拟地址空间所对应的物理内存却没有复制。比如,这个时候父子进程中变量
x对应的虚拟地址和物理地址都相同,但等到虚拟地址空间被写时,对应的物理内存空间被复制,这个时候父子进程中变量x对应的虚拟地址还是相同的,但是物理地址不同,这就是"写时复制"。还有父进程和子进程是始终共享正文段(代码段)。

你可能感兴趣的:(Linux)