2014-02-12 2 views
5

Этот вопрос был задан до: 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:

Также стоит упомянуть: Один из вариантов в сценарии, чтобы перезагрузить систему. Если он вызван из скрипта, он работает. Но я хотел бы вызвать перезагрузку из программы.

+1

Вы передали 'execl()' относительный путь. Это работает только в том случае, если ваш рабочий каталог '/', которого, вероятно, нет. Может быть, попробуйте '/ sbin/reboot'? – glglgl

+2

Что такое другой пользователь с привилегиями root? Я думаю, что это неверно. Однако правильный ответ для этого заключается в том, чтобы настроить вашу программу на root. Так что программа всегда работает с привилегиями root. Пожалуйста, имейте в виду проблемы безопасности с этим. – iveqy

+0

@glglgl Извините, что это была опечатка. Исправлено –

ответ

2

Прежде всего, войдите в систему как «другой пользователь с корневыми привилегиями» и выполните «init 6», если система была перезапущена?

Да: использовать систему ("init 6"); в вашей программе.

нет: у вас есть проблема с безопасностью, сначала вы должны это исправить.

Смежные вопросы