[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?
-
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.
-
My first try was based on startDetached. It seems to do a fork internally, too.
-
No. Plain Reboot used to work just fine. Colleagues with 20+ years of Unix experience assured me this is an underlying OS limitation.