internal: prevent early exit processes from being zombies (#11995)

Prevent `exec`/`exec-once` processes which terminate very early
(before Hyprland declares that it does not want to reap zombies)
from getting stuck as zombie processes.
This commit is contained in:
Nikolai Nechaev 2025-10-11 00:03:34 +09:00 committed by GitHub
parent 32f3233324
commit da31e82aab
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 7 additions and 2 deletions

View file

@ -194,6 +194,10 @@ static bool test() {
EXPECT_CONTAINS(str, "fullscreen: 2");
}
// Ensure that the process autostarted in the config does not
// become a zombie even if it terminates very quickly.
EXPECT(Tests::execAndGet("pgrep -f 'sleep 0'").empty(), true);
// kill all
NLog::log("{}Killing all windows", Colors::YELLOW);
Tests::killAllWindows();

View file

@ -46,6 +46,7 @@ $menu = wofi --show drun
# Autostart necessary processes (like notifications daemons, status bars, etc.)
# Or execute your favorite apps at launch like this:
exec-once = sleep 0 # Terminates very quickly
# exec-once = $terminal
# exec-once = nm-applet &
# exec-once = waybar & hyprpaper & firefox

View file

@ -187,6 +187,8 @@ int main(int argc, char** argv) {
return 1;
}
reapZombieChildrenAutomatically();
g_pCompositor->initServer(socketName, socketFd);
if (verifyConfig)
@ -195,8 +197,6 @@ int main(int argc, char** argv) {
if (!envEnabled("HYPRLAND_NO_RT"))
NInit::gainRealTime();
reapZombieChildrenAutomatically();
Debug::log(LOG, "Hyprland init finished.");
// If all's good to go, start.