3

假设我们有一个进程分配一个侦听特定端口的套接字,对其进行处理,然后异常终止。现在第二个进程启动并希望分配一个套接字,该套接字侦听先前由崩溃进程持有的同一端口。这个套接字可以重新分配吗?

  • 操作系统如何恢复未正确释放的资源?操作系统是否跟踪进程 ID 以及每个分配的资源?

  • 这种清理是我可以期望每个符合 POSIX 的系统都做的事情吗?

4

2 回答 2

2

这取决于操作系统,但通常操作系统会维护一个进程控制结构,以管理其资源等。当一个进程从系统分配资源(例如打开文件或分配内存)时,分配的详细信息将放在该结构中。当进程终止时,其中的任何东西都会被清理掉——但最好在你进行时明确地清理掉。

于 2011-07-17T11:00:09.260 回答
1

具体细节取决于操作系统,但一般来说,用户代码运行在虚拟地址空间/沙箱中,它没有任何直接访问硬件资源的权限。用户进程想要访问/分配的任何东西都必须通过调用操作系统并要求它提供所需的资源来提供。

因此,操作系统有一种简单的方法可以知道谁被分配了哪些资源,并且只要它跟踪这些信息,在进程崩溃的情况下清理资源就像获取分配给该进程的资源列表一样简单,并再次将它们全部标记为可用。

于 2011-07-17T11:00:44.487 回答