Как упоминал Мэтью, это, вероятно, проблема переменной env. Попробуйте вывести свой список env перед вызовом вашей программы в обоих случаях - через заглушку или «вручную».
Кстати, это могло бы помочь, если бы вы могли предоставить больше информации, почему ваша программа потерпела крах. Журнальный файл ? основной дамп / gdb? возвращаемое значение из execve?
Edit:
Другие проверки: вы уверены, что передали точно такой же список параметров (если есть параметры)?
Чтобы ответить на ваш вопрос, между этими двумя методами нет различий. На самом деле ваша shell fork () и, наконец, вызов execve () для запуска вашего процесса, передавая его параметрами, которые вы указали вручную, и переменными окружения, которые вы установили в вашей оболочке. Кстати, при запуске вашей программы через init она может запускаться на ранней стадии запуска вашей машины. Вы уверены, что к этому моменту все готово для правильной работы вашего приложения?