Этот вопрос был задан до: How to restart Linux from inside a C++ program?перезагрузка Linux из программы
Однако, ни один из ответов не похоже на работу для меня.
Вот моя проблема:
У меня есть программа на части аппаратных средств. Я могу войти в систему как root и запустить его без каких-либо проблем. Однако, если я вхожу в систему как другой пользователь с корневыми привилегиями, программа выполняет отлично, но не перезагружается, как следует. Он закрывает текущую сессию Telnet.
Чтобы перезагрузить компьютер, я использовал system(reboot)
. До сих пор я пытался:
sync();
reboot(RB_POWER_OFF);
И
execl("/sbin/reboot","reboot",NULL,NULL);
не дало никаких результатов.
(Я не уверен, если я правильно использовал execl
.Это первый раз, когда я его использую. Пожалуйста, поправьте меня, если я испортил).
Любая помощь будет оценена по достоинству.
Edit:
/data/local/sbin # cat /etc/passwd
root:x:0:0:root:/root:/bin/sh
service:54zljpSAe:0:0:root:/root:/data/local/sbin/script
, если я войти в систему в качестве службы, "сценарий" будет работать. У пользователя есть варианты выбора на выбор. Один из вариантов - запустить вышеупомянутую программу.
Edit:
Также стоит упомянуть: Один из вариантов в сценарии, чтобы перезагрузить систему. Если он вызван из скрипта, он работает. Но я хотел бы вызвать перезагрузку из программы.
Вы передали 'execl()' относительный путь. Это работает только в том случае, если ваш рабочий каталог '/', которого, вероятно, нет. Может быть, попробуйте '/ sbin/reboot'? – glglgl
Что такое другой пользователь с привилегиями root? Я думаю, что это неверно. Однако правильный ответ для этого заключается в том, чтобы настроить вашу программу на root. Так что программа всегда работает с привилегиями root. Пожалуйста, имейте в виду проблемы безопасности с этим. – iveqy
@glglgl Извините, что это была опечатка. Исправлено –