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"
|
||||
"strconv"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"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
|
||||
// proceed with caution!
|
||||
|
||||
|
@ -121,6 +127,8 @@ func doInit(fd uintptr) {
|
|||
close(done)
|
||||
}()
|
||||
|
||||
timeout := make(chan struct{})
|
||||
|
||||
r := 2
|
||||
for {
|
||||
select {
|
||||
|
@ -138,8 +146,15 @@ func doInit(fd uintptr) {
|
|||
r = 255
|
||||
}
|
||||
}
|
||||
go func() {
|
||||
time.Sleep(residualProcessTimeout)
|
||||
close(timeout)
|
||||
}()
|
||||
case <-done:
|
||||
os.Exit(r)
|
||||
case <-timeout:
|
||||
fmt.Println("fortify-init: timeout exceeded waiting for lingering processes")
|
||||
os.Exit(r)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue