2

如何在进程终止时清理进程(进程 A)分配的所有资源?进程A在使用其他进程提供的服务时,可能会在其他进程空间分配资源(A将使用IPC访问其他进程提供的服务)。

是否有任何可用的标准机制/框架?我的进程在 Linux 环境中运行。

谢谢,登

4

1 回答 1

2

一些资源会自动清理。在堆栈或堆上分配的内存、套接字和文件描述符、信号量操作(如果使用 SEM_UNDO)。

对于您在问题中模糊提到的场景(使用 IPC 从另一个进程 B 访问服务),您将需要:

  1. 检测进程B中的情况
  2. 用手清理。

解决 #1 的首要方法是进程 B 可以轮询进程 A 的 PID 的存在。显然不理想。更好的解决方案是使用 IPC 方法来检测连接消失的另一端(例如 TCP 套接字)

如果您将进程 A 和 B 与网络上的两台计算机进行比较,典型的解决方案是进程 B 会在进程 A 的每次 API 调用之后进行清理,或者会衰减它的连接列表并最终超时并且如果在给定的时间后没有收到进程 A 的消息,则清理进程 A 的资源。

于 2011-11-15T18:07:48.427 回答