Что происходит с текущей программой после вызова функции execv?

Предположим, что в какой-то момент в моей программе я использую execv, и функция успешно выполняется. Теперь моя программа изменилась. Что именно с ним случилось? (Вся память стирается автоматически?)


person LiorGolan    schedule 06.05.2016    source источник
comment
Возможный дубликат Пожалуйста, объясните функцию exec() и ее семейство   -  person Dan Getz    schedule 06.05.2016


Ответы (1)


execve() не возвращается в случае успеха, а текст, данные, bss и стек вызывающего процесса перезаписываются загруженной программой.

То есть все данные текущего процесса будут удалены, а новая программа будет загружена в память, заменив исходный процесс.

person fluter    schedule 06.05.2016
comment
так, например, если вы разветвляете процесс и из дочернего кода malloc() некоторую память, а затем вызываете execv(), вам не нужно его освобождать(). Правильно? - person LiorGolan; 06.05.2016
comment
@LiorGolan это верно. - person fluter; 06.05.2016