Очистка ресурсов в Linux - PullRequest
       18

Очистка ресурсов в Linux

2 голосов
/ 15 ноября 2011

Как можно очистить все ресурсы, выделенные процессом (процессом A), когда он завершается? Процесс A может распределять ресурсы в другом пространстве процесса, когда он использует службы, предоставляемые другим процессом (A будет использовать IPC для доступа к службам, предлагаемым другим процессом).

Существуют ли стандартные механизмы / структуры, доступные для этого? Я работаю в среде Linux.

Спасибо, Den

1 Ответ

2 голосов
/ 15 ноября 2011

Некоторые ресурсы очищаются автоматически. Память, выделенная для стека или кучи, дескрипторы сокетов и файлов, операции с семафорами (если вы используете SEM_UNDO).

Для сценария, на который вы смутно ссылаетесь в своем вопросе (используя IPC для доступа к услугам из другого процесса B), вам необходимо:

  1. обнаружить ситуацию в процессе B
  2. убирать вручную.

Первым принципальным методом для решения # 1 будет процесс B, который может опрашивать наличие PID процесса A. Это явно не идеально. Лучшим решением было бы использовать метод IPC, который обнаруживает другую сторону исчезновения соединения (например, сокет TCP)

Если вы проведете параллель между процессом A и B по сравнению с двумя компьютерами в сети, типичным решением для этого будет то, что процесс B будет очищаться после каждого вызова API из процесса A, или будет разрушать свой список соединений и в конечном итоге тайм-аут и очистите ресурсы процесса A, если он не получил ответа от процесса A по истечении заданного промежутка времени.

...