fork什么资源共享
时间: 2024-01-30 14:02:45 浏览: 27
回答: 在fork之后,子进程和父进程共享的资源包括:数据空间、堆和栈的副本,正文段,打开的文件,实际用户ID、实际组ID、有效用户ID、有效组ID,添加组ID,进程组ID,会话期ID,控制终端,设置-用户-ID标志和设置-组-ID标志,当前工作目录,根目录,文件方式创建屏蔽字,信号屏蔽和排列,对任一打开文件描述符的在执行时关闭标志,环境,连接的共享存储段(共享内存),资源限制等。\[2\]\[3\]
#### 引用[.reference_title]
- *1* *2* *3* [fork后父子进程共享资源](https://blog.csdn.net/teffi/article/details/76407675)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
相关问题
fork函数的作用是什么
fork函数是Unix/Linux操作系统中的一个系统调用,它的作用是创建一个新的进程,该进程是调用进程的副本,被称为子进程。子进程和父进程共享程序代码、变量、文件描述符等资源,但有各自独立的地址空间。也就是说,子进程可以继承父进程的所有资源,但是它们之间的运行是相互独立的。
fork函数的返回值有以下三种情况:
- 如果返回值为-1,说明fork调用失败,此时没有子进程被创建。
- 如果返回值为0,说明当前运行的是子进程,子进程可以通过返回0来表示自己是子进程。
- 如果返回值大于0,说明当前运行的是父进程,返回值是子进程的进程ID。
通过fork函数,一个进程可以创建出一个子进程,然后让子进程去执行某些任务,这样就可以实现多任务并发执行的功能。
fork和vfork有什么区别?
fork和vfork是两种创建新进程的系统调用,在操作系统中有以下区别:
1. fork(): fork()系统调用会创建一个与父进程几乎完全相同的子进程。子进程继承了父进程的内存空间、文件描述符和其他资源。父进程和子进程之间通过返回值来区分,父进程接收到子进程的PID(进程标识符),而子进程接收到0的返回值。fork()是一种比较重的操作,因为它需要复制父进程的所有资源。
2. vfork(): vfork()系统调用也会创建一个新进程,但与fork()不同,vfork()创建出的子进程与父进程共享地址空间。也就是说,vfork()创建的子进程与父进程共享内存,直到子进程调用exec()或exit()函数之后才会执行正常的程序。在子进程调用exec()或exit()前,父进程会一直处于阻塞状态。vfork()通常用于创建一个临时子进程,该子进程执行某些操作后会立即调用exit()或exec()。
总结:fork()创建一个与父进程几乎完全相同的子进程,而vfork()创建一个共享内存空间的子进程,直到子进程执行exec()或exit()之前,父进程会处于阻塞状态。