init: post initial process death exit timeout
Wait for 5 seconds before printing a message and exiting after picking up the initial process's wait status. This also kills any lingering processes.This behaviour is helpful for applications launched without a terminal attached. Signed-off-by: Ophestra Umiker <cat@ophivana.moe>
This commit is contained in:
parent
dd78728fb3
commit
5401882ed0
|
@ -11,10 +11,16 @@ import (
|
||||||
"path"
|
"path"
|
||||||
"strconv"
|
"strconv"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
"time"
|
||||||
|
|
||||||
"git.ophivana.moe/cat/fortify/internal/verbose"
|
"git.ophivana.moe/cat/fortify/internal/verbose"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// time to wait for linger processes after death initial process
|
||||||
|
residualProcessTimeout = 5 * time.Second
|
||||||
|
)
|
||||||
|
|
||||||
// everything beyond this point runs within pid namespace
|
// everything beyond this point runs within pid namespace
|
||||||
// proceed with caution!
|
// proceed with caution!
|
||||||
|
|
||||||
|
@ -121,6 +127,8 @@ func doInit(fd uintptr) {
|
||||||
close(done)
|
close(done)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
timeout := make(chan struct{})
|
||||||
|
|
||||||
r := 2
|
r := 2
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
|
@ -138,8 +146,15 @@ func doInit(fd uintptr) {
|
||||||
r = 255
|
r = 255
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
go func() {
|
||||||
|
time.Sleep(residualProcessTimeout)
|
||||||
|
close(timeout)
|
||||||
|
}()
|
||||||
case <-done:
|
case <-done:
|
||||||
os.Exit(r)
|
os.Exit(r)
|
||||||
|
case <-timeout:
|
||||||
|
fmt.Println("fortify-init: timeout exceeded waiting for lingering processes")
|
||||||
|
os.Exit(r)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue