【问题标题】:reboot linux from a program从程序重新启动linux
【发布时间】: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 我提供了更多信息。检查我的编辑

标签: c linux reboot


【解决方案1】:

首先,以 “具有 root 权限的其他用户” 身份登录您的系统,如果系统已重新启动,则执行“init 6”?

是的:使用 system("init 6");在你的程序中。

否:您有安全问题,首先您必须解决它。

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    • 2017-06-01
    • 2014-03-25
    相关资源
    最近更新 更多