[Solved] Reboot on Linux embedded
-
wrote on 27 Mar 2012, 15:32 last edited by
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?
-
wrote on 27 Mar 2012, 15:35 last edited by
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?
-
wrote on 28 Mar 2012, 21:51 last edited by
can you try using the full path to reboot or shutdown?
-
wrote on 29 Mar 2012, 06:41 last edited by
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.
-
wrote on 29 Mar 2012, 08:08 last edited by
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.
-
wrote on 29 Mar 2012, 14:39 last edited by
I am root. And it used to work, before I expanded the buffers to use most of the available memory for archiving.
-
wrote on 29 Mar 2012, 14:45 last edited by
Suppose your command is in /usr/sbin/reboot you can try with:
@
QProcess::startDetached("/usr/sbin/reboot");
@ -
wrote on 30 Mar 2012, 08:25 last edited by
My first try was based on startDetached. It seems to do a fork internally, too.
-
wrote on 30 Mar 2012, 08:29 last edited by
Have you tried with the full path of reboot command?
-
wrote on 30 Mar 2012, 08:54 last edited by
No. Plain Reboot used to work just fine. Colleagues with 20+ years of Unix experience assured me this is an underlying OS limitation.
1/10