У меня 2 машины под управлением linux.
На одном компьютере команда перезагрузки - это исполняемый файл, обычно встречающийся во всех дистрибутивах Linux.
На втором компьютере команда перезагрузки представляет собой сценарий оболочки, настроенный с использованием некоторых других команд аппаратных средств для перезагрузки системы.
Одно различие в поведении двух машин заключается в том, что когда я выполняю reboot
на первом компьютере, отображается другое приглашение оболочки, а затем выполняется перезагрузка.
Но в случае второй машины она перезагружается без отображения приглашения оболочки. Я ожидаю, что вторая машина будет вести себя так же, как первая, когда будет дана команда перезагрузки.
Сейчас я анализирую исходный код shutdown.c
и halt.c
обычно встречается в дистрибутивах Linux, так что я могу найти реализацию, которая создает propmt оболочки при перезагрузке, и использовать ее в сценарии оболочки на второй машине.
Пожалуйста, дайте мне несколько указателей, с чего мне следует начать поиск реализации.
Спасибо
Я ожидаю, что программа, которая возвращает вас в командную строку, на самом деле ничего не делает, а скорее взаимодействует с вашим демоном инициализации (sysvinit, upstart или что-то еще, что работает как процесс 1) и просит его выключить систему. Другой сценарий - это обычный сценарий.
Я предполагаю, что программа дважды уходит в фоновый режим.
Использовать shutdown -r
вместо. Исторически он использовался в различных союзах, поэтому я считаю, что его интерфейс и поведение более известны и предсказуемы.
Заключительные системные вызовы для перезагрузки машины выдает ядро Linux, а не пользовательская среда. Вероятно, ядро внутренне использует IPMI для перезагрузки машины. В системах используются разные подходы к выключению и перезагрузке. Я встречал несколько, которые требуют, чтобы вы нажали на RTC, чтобы перезагрузить систему, и это именно то, что ядро делает для этой машины.
Какая у машины архитектура? ARM, MIPS, прочее? WindRiver - это разработчик VxWorks, если я не ошибаюсь. Вероятно, вы можете позвонить в их службу поддержки и узнать, смогут ли они вам помочь.