Я всегда был немного туманен в этом маленьком волшебстве C. Когда вы вызываете execv, вы «заменяете образ процесса». Что именно это значит? Только сегмент DATA? Все, что выделено для процесса? Стек? Куча?
Мой вопрос о том, что происходит с хранилищем, используемым параметрами, которые вы передаете в execv? Если они были локальными переменными для функции, вызвавшей execv, то они находятся в стеке. Но если вы замените образ процесса и вызовете функцию main() нового процесса, при возвращении функции main() произойдут плохие вещи, потому что информация стека, указывающая на место возврата из основного вызова, была заменена новым образом процесса. То же самое для переменных, да? А что, если бы эти переменные были размещены в куче?
Пытливые умы спрашивают любого, кто знает.
main
возвращается, программа завершается. - person interjay   schedule 06.12.2015