【发布时间】:2014-02-12 09:05:49
【问题描述】:
之前有人问过这个问题:How to restart Linux from inside a C++ program?
但是,似乎没有一个答案对我有用。
这是我的问题:
我有一个硬件上的程序。我可以以 root 身份登录并运行它,没有任何问题。但是,如果我以具有 root 权限的其他用户身份登录,则程序可以正常执行,但不会按应有的方式重新启动。它只会关闭当前的 Telnet 会话。
要重新启动,我使用了system(reboot)。
到目前为止,我已经尝试过:
sync();
reboot(RB_POWER_OFF);
还有
execl("/sbin/reboot","reboot",NULL,NULL);
无济于事。
(我不确定,我是否正确使用了execl。这是我第一次使用它。如果我搞砸了,请纠正我)。
任何帮助将不胜感激。
编辑:
/data/local/sbin # cat /etc/passwd
root:x:0:0:root:/root:/bin/sh
service:54zljpSAe:0:0:root:/root:/data/local/sbin/script
如果我作为服务登录,“脚本”将运行。用户有一个列表选项可供选择。一种选择是运行上述程序。
编辑:
另外值得一提的是:脚本中的选项之一是重新启动系统。如果从脚本内部调用,它可以工作。但我想从程序中调用 reboot。
【问题讨论】:
-
你给了
execl()一个相对路径。这只适用于你的工作目录是/,它可能不是。也许试试/sbin/reboot? -
什么是具有 root 权限的不同用户?我认为这是错误的。但是,正确的答案是将您的程序设置为 root。这样程序总是以root权限运行。请注意与此相关的安全问题。
-
@glglgl 抱歉打错了。已更正
-
@iveqy 由于 OP 使用 telnet(!),因此根本不会存在安全问题。
-
@iveqy 我提供了更多信息。检查我的编辑