Как я могу очистить все ресурсы, выделенные процессом (процессом A), когда он завершается? Процесс A может выделять ресурсы в пространстве другого процесса, когда он использует службы, предоставляемые другим процессом (A будет использовать IPC для доступа к службам, предлагаемым другим процессом).
Существуют ли какие-либо стандартные механизмы/фреймворки для этого? Я запускаю процесс в среде Linux.
Спасибо, Ден
1 ответ
Некоторые ресурсы очищаются автоматически. Память, выделенная в стеке или куче, дескрипторы сокетов и файлов, операции с семафорами (если вы используете SEM_UNDO).
Для сценария, на который вы неопределенно ссылаетесь в своем вопросе (используя IPC для доступа к службам из другого процесса B), вам необходимо:
- обнаружить ситуацию в процессе B
- убирать вручную.
Метод первых принципов для решения # 1 будет заключаться в том, что процесс B может либо опросить наличие PID процесса A. Это явно не идеально. Лучшим решением было бы использовать метод IPC, который обнаруживает другую сторону исчезновения соединения (например, сокет TCP).
Если провести параллель между процессами A и B и сравнить их с двумя компьютерами в сети, то типичным решением будет то, что процесс B очищается после каждого вызова API от процесса A или разрушает свой список подключений и, в конечном итоге, истечет время ожидания и очищать ресурсы процесса A, если он не получает известий от процесса A в течение заданного времени.
Похожие вопросы
Новые вопросы
linux
ВНИМАНИЕ: Все вопросы по Linux должны быть связаны с программированием; те, которые не будут закрыты. Используйте этот тег, только если ваш вопрос касается программирования с использованием API-интерфейсов Linux или поведения, специфичного для Linux, а не только потому, что вы запускаете свой код в Linux. Если вам нужна поддержка Linux, вы можете попробовать https://unix.stackexchange.com или сайт Stack Exchange конкретного дистрибутива Linux, например https://askubuntu.com или https://elementaryos.stackexchange.com/.