[Solved] Reboot on Linux embedded



  • I am trying to reboot a linux embedded device using QProcess.

    I have tried various ways, and none of them seem to work:

    a)
    @
    QProcess shellCommand;
    shellCommand.startDetached("reboot");
    @

    b)
    @
    QProcess shellCommand;
    shellCommand.start("reboot");
    shellCommand.waitForFinished();
    @

    c)

    @
    QProcess shellCommand;
    shellCommand.start("shutdown -r");
    shellCommand.waitForFinished();
    @

    d)

    @
    QProcess shellCommand;
    shellCommand.start("sh -c reboot");
    shellCommand.waitForFinished();
    @

    I have tested all the command using telnet. Every one of them reboots the system.
    I have also ensured that my application runs as root.
    The QProcess in attempts b) to d) always exits with "NormalExit", and an exit code of zero.

    Ideas?



  • Note: My application uses about 80 % of the available system memory, which is all right because it's the only application running.

    Does QProcess consume a lot of memory?



  • can you try using the full path to reboot or shutdown?



  • I think I know what's the problem:
    The fork that must be somewhere inside QProcess can't work, because there isn't enough memory left to fork the current application. Why I wouldn't get an error state I don't know.

    I have solved this by having a worker script run in an endless loop that will execute any shell script following a specific naming convention. I create a script containing the reboot command, and let it execute.



  • have you tried to add "0" to your shell command ? "shutdown -r 0".
    @QProcess shellCommand;
    shellCommand.start("shutdown -r 0");
    shellCommand.waitForFinished();@

    if it does not work, may be the problem cause that you are not the root.



  • I am root. And it used to work, before I expanded the buffers to use most of the available memory for archiving.



  • Suppose your command is in /usr/sbin/reboot you can try with:
    @
    QProcess::startDetached("/usr/sbin/reboot");
    @



  • My first try was based on startDetached. It seems to do a fork internally, too.



  • Have you tried with the full path of reboot command?



  • No. Plain Reboot used to work just fine. Colleagues with 20+ years of Unix experience assured me this is an underlying OS limitation.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.