Разница между execv и просто запуском приложения? - PullRequest
0 голосов
/ 13 мая 2009

У нас есть заглушка, которую мы запускаем из inittab, которая выполняет наш процесс execv. (ARM Linux Kernel 2.6.25)

При тестировании процесса происходит сбой, только если он запущен из inittab и execv'd. Если он запускается из командной строки, он отлично работает каждый раз.

В процессе интенсивно используется SYS V IPC.

Есть ли какие-либо различия между двумя методами запуска, о которых я должен знать?

Ответы [ 5 ]

2 голосов
/ 13 мая 2009

Как упоминал Мэтью, это, вероятно, проблема переменной env. Попробуйте вывести свой список env перед вызовом вашей программы в обоих случаях - через заглушку или «вручную».

Кстати, это могло бы помочь, если бы вы могли предоставить больше информации, почему ваша программа потерпела крах. Журнальный файл ? основной дамп / gdb? возвращаемое значение из execve?


Edit: Другие проверки: вы уверены, что передали точно такой же список параметров (если есть параметры)?

Чтобы ответить на ваш вопрос, между этими двумя методами нет различий. На самом деле ваша shell fork () и, наконец, вызов execve () для запуска вашего процесса, передавая его параметрами, которые вы указали вручную, и переменными окружения, которые вы установили в вашей оболочке. Кстати, при запуске вашей программы через init она может запускаться на ранней стадии запуска вашей машины. Вы уверены, что к этому моменту все готово для правильной работы вашего приложения?

1 голос
/ 13 мая 2009

Может ли это быть проблемой переменных среды? Если это так, рассмотрите возможность использования execve или execle с соответствующим аргументом envp.

0 голосов
/ 05 февраля 2010

Ошибка ядра / библиотеки. Все вычищено после полной перекомпиляции.

0 голосов
/ 13 мая 2009

А если заменить заглушку сценарием оболочки? Если он работает из командной строки, он должен работать из сценария оболочки, и вы можете знать, является ли он вашей заглушкой или фактом, что он находится в inittab.

Может ли это быть контрольной проблемой tty?

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

0 голосов
/ 13 мая 2009

Предложение переменных среды довольно хорошее - в частности, я бы проверил $ ​​PATH, чтобы убедиться, что ваши зависимые библиотеки находятся (если они есть). Еще одна вещь, которую вы можете проверить: работает ли вы под тем же uid / gid, что и inittab?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...