Я пишу службу (т. Е. Фоновый процесс) и предлагаю начать ее через общую библиотеку. То есть, кто-то, кто хочет использовать эту услугу, будет ссылаться на общую библиотеку, вызовите метод start(), который будет вилкой и возвратом. Затем вилка запускает службу.fork() и освободить всю выделенную память
Проблема с этим подходом заключается в том, что в процессе обслуживания теперь может быть много выделенной памяти, которая на самом деле не нужна. Есть ли способ избавиться от этого, и разветвленный процесс распределяет свои собственные вещи? Я знаю о Exec() конечно, но проблема в том,
- , что мне нужна исполняемый файл, который не может быть в том месте, я ожидаю, что это из-за различные макеты папок операционной системы
- что мне пришлось бы передать все потенциальные параметры в строку, чтобы передать ее в качестве аргументов программы для exec().
Поэтому в основном я ищу способ вызвать произвольную функцию FUNC() с некоторыми параметрами, которые должны выполняться в новом процессе, и все, что не прошло в этой функции не должно быть в новый процесс. Есть ли способ достичь этого или чего-то подобного?
Это, как правило, не нужно, поскольку Linux использует реализацию fork-on-write fork, так что родительский и дочерний ресурсы разделяют «скопированную» память до тех пор, пока ребенок не изменяет ее. –
То, что вы хотите, на самом деле невозможно.Например, предположим, что библиотека использует stdio, а stdio имеет выделенную память, вы не хотите, чтобы ваша «свободная вся выделенная память» освобождала это. Так что вы действительно хотите «освободить все, что больше не нужно», но как может функция общего назначения узнать, что не нужно? – Barmar
@RossRidge Но вы хотели бы удалить свою ссылку на копию, так что все это исчезнет, когда родитель выйдет. – Barmar