Use FASTHTTP_PREFORK_CHILD env variable to detect child (#1783)

It's better to use an environment variable as they are more standard.
They way flags are parsed isn't standardized within the Go ecosystem.

Fixes: https://github.com/valyala/fasthttp/issues/1782
This commit is contained in:
Erik Dubbelboer
2024-06-02 10:33:50 +02:00
committed by GitHub
parent 3edfab8225
commit b001a40bea
2 changed files with 7 additions and 19 deletions
+5 -17
View File
@@ -2,7 +2,6 @@ package prefork
import (
"errors"
"flag"
"log"
"net"
"os"
@@ -14,8 +13,8 @@ import (
)
const (
preforkChildFlag = "-prefork-child"
defaultNetwork = "tcp4"
preforkChildEnvVariable = "FASTHTTP_PREFORK_CHILD"
defaultNetwork = "tcp4"
)
var (
@@ -69,21 +68,9 @@ type Prefork struct {
files []*os.File
}
func init() { //nolint:gochecknoinits
// Definition flag to not break the program when the user adds their own flags
// and runs `flag.Parse()`
flag.Bool(preforkChildFlag[1:], false, "Is a child process")
}
// IsChild checks if the current thread/process is a child.
func IsChild() bool {
for _, arg := range os.Args[1:] {
if arg == preforkChildFlag {
return true
}
}
return false
return os.Getenv(preforkChildEnvVariable) == "1"
}
// New wraps the fasthttp server to run with preforked processes.
@@ -148,9 +135,10 @@ func (p *Prefork) setTCPListenerFiles(addr string) error {
func (p *Prefork) doCommand() (*exec.Cmd, error) {
/* #nosec G204 */
cmd := exec.Command(os.Args[0], append(os.Args[1:], preforkChildFlag)...)
cmd := exec.Command(os.Args[0], os.Args[1:]...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Env = append(os.Environ(), preforkChildEnvVariable+"=1")
cmd.ExtraFiles = p.files
err := cmd.Start()
return cmd, err
+2 -2
View File
@@ -13,11 +13,11 @@ import (
)
func setUp() {
os.Args = append(os.Args, preforkChildFlag)
os.Setenv(preforkChildEnvVariable, "1")
}
func tearDown() {
os.Args = os.Args[:len(os.Args)-1]
os.Unsetenv(preforkChildEnvVariable)
}
func getAddr() string {