On Saturday 8 February 2025 23:07:38 Greenwich Mean Time Jack wrote:
On 2025.02.08 14:00, Filip Kobierski wrote:
Hi Jacques,
I think you are looking for SIGSTP or SIGSTOP but I think that's
not exactly it. From what I know you cannot do that for emerge
easily. For similar results you might want to set up ccache.
https://wiki.gentoo.org/wiki/Ccache
Regards
Filip
On Saturday, February 8th, 2025 at 15:47, Jacques Montier
<jmontier@gmail.com> wrote:
Hello everyone,
Is it possible to stop a compilation midway in the case of a very
long compilation and then resume it from the same point without
having to start over from the beginning ?
Thank you for your response.
Best regards,
--
Jacques Montier.
If you really mean just interrupting a compile, then you should be able
to stop with Ctl-C, and then start/continue by running make or ninja
again, assuming that is what is used for whatever you are compiling.
Ccache can help since most of the results of the previous compile
attempt will have been cached, and so will be completed more quickly
the next time, but it's not the same as continuing from where it was
interrupted.
If, as Filip implies, you are asking about interrupting emerge, it's
easy enough to interrupt, but essentially impossible to continue from
where it left off. "emerge --continue" will just try to emerge every
package from the interrupted emerge which was not completed, but it
will start each one from scratch. What has often, but not alwasy
worked for me, is to use ebuild directly. "ebuild
.../path/to/package.ebuild compile" will figure out that everything
prior to the compile was completed, and then issue the make or ninja
commands, which will just pick up where they left off. If that does
work, then you need to repeat the ebuild, but with the install and then
the qmerge commands. The only problem with that (for me, at least) is
that ebuild does not leave exactly the same lines in emerge.log, so a
package installed that way will not show up in "gentlop -t package"
output.
You can run 'ebuild <package> merge', but this will only continue with the
last package you were emerging when it was interrupted and it will continue
from whatever stage the emerge was at the time it was interrupted.
If your intention is to suspend/hibernate the OS halfway through an emerge and
continue later on, then you can suspend the emerge job with job control:
Ctrl+z
After you wake up the system from suspend or reboot from hibernate you can
bring the emerge job back into the foreground, so it can continue running from
where you left it, by invoking:
fg
NOTE: Depending how many threads you were running before you suspended the
emerge and how much swap was being used, you may need to wait for a few
minutes for all the threads to pause. Keep an eye on top to confirm this has
taken place and the CPU is now idle, before you suspend/hibernate the OS. If
you don't you could discover the suspend/hibernate fails if you do not have
enough RAM/space.