Запустить / остановить процесс во встроенном Linux - PullRequest
0 голосов
/ 03 июня 2018

У меня есть собственная встроенная система Linux на плате PocketBeagle.Я разработал простое приложение gpio на C, которое выдает команду включения / выключения на один из выводов разъемов платы.Приложение называется gpio_aa6 и находится в / root.Первой задачей было найти способ автоматического запуска моего приложения после загрузки платы.Я нашел два способа сделать это;первым было добавить запись в каталог etc / rcS.Эта запись представляет собой простой файл сценария, который запускает мое приложение.Второй способ - отредактировать файл / etc / inittab и добавить в него запись (:: respawn: / root / gpio_aa6).В обоих случаях мое приложение было успешно запущено, но я все еще не уверен, является ли это правильным способом автоматического запуска моего приложения.Затем я подошел ко второй проблеме, как я могу остановить запущенное приложение, так как респаун перезапускает приложение, если оно завершается?Я общаюсь с доской двумя способами;через последовательную связь (используя экранный терминал) и через веб-сервер (root@192.168.42.2).Я пытался использовать Ctrl + C, Ctrl + Z, Ctrl + \, но не смог остановить продолжение работы программы.Затем я использовал команду "killall" с killsignals -9 или -15, кажется, что программа прерывается, но сразу после этого запускается снова.

Мое приложение должно работать бесконечно, но иногда мне нужно его остановитьобновить и снова запустить его.

Есть ли какие-либо предложения, как преодолеть эту проблему?Спасибо.

1 Ответ

0 голосов
/ 21 июня 2018

Оба решения, которые вы использовали, верны.Я лично предпочитаю добавить сценарий инициализации в /etc/init.d.

Я полагаю, что вы наблюдаете, что вы, очевидно, не можете убить программу, потому что вы запускаете программу с inittab,с ключевым словом respawn, которое точно указывает программе init перезапустить ваше приложение при выходе.Если вы на самом деле проверяете PID своего приложения, вы увидите, что оно меняется каждый раз, когда вы его уничтожаете.

Поэтому я бы порекомендовал вам использовать вместо этого сценарий инициализации, с помощью которого вы можете реализовать действия запуска и остановки.См. ./package/lldpd/S60lldpd для базового примера в Buildroot.

...