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

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

Спасибо, Ден

2
Deno 15 Ноя 2011 в 19:25

1 ответ

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

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

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

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

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

2
gravitron 15 Ноя 2011 в 22:07