On Mon, Nov 11, 2024 at 12:29 AM Peter Galbavy <pe...@wonderland.org> wrote: > > They are created by the VS Code terminal session before I run my program. > Their open flags are not known to me or under my control, but I guess they > don't have close-on-exec set. > > I would not that in https://github.com/golang/go/issues/37857 you did say > "The status of files that are not listed in ExtraFiles is not unpredictable: > those files are closed" but it is not clear in the current comments/docs what > should happen if ExtraFiles is nil itself, they just say that that FDs listed > are inherited, which in turn implies but not explicitly that others are not > inherited.
Yes, as I said later in the issue that comment was inaccurate. Ian > As mentioned, I've worked around my specific issue by walking all FDs (>2) > and setting their ExtraFiles slot to nil, rather then the field itself left > as nil. > > On Friday 8 November 2024 at 19:03:43 UTC Ian Lance Taylor wrote: >> >> On Fri, Nov 8, 2024 at 2:18 AM Peter Galbavy <pe...@wonderland.org> wrote: >> > >> > I have a command line manager tool that builds the starting environment >> > for a process and calls cmd.Start(). >> > >> > The code sets (doesn't need to as it starts as nil, but does to be extra >> > explicit) cmd.ExtraFiles = nil, but even then I seem to inherit a bunch of >> > FDs from the CLI - I noticed because the oddities belong to VSCode >> > terminal (cmd dump first, just before to call to cmd.Start()): >> > >> > 2024-11-08T10:08:09Z DEBUG: pkg/host/local.go:221 host.(*Local).Start() > >> > cordial: cmd: >> > &exec.Cmd{Path:"/home/peter/geneos/packages/gateway/active_prod/gateway2.linux_64", >> > >> > Args:[]string{"/home/peter/geneos/packages/gateway/active_prod/gateway2.linux_64", >> > "Demo Gateway", "-gateway-name", "Demo Gateway", "-resources-dir", >> > "/home/peter/geneos/packages/gateway/active_prod/resources", "-log", >> > "/home/peter/geneos/gateway/gateways/Demo Gateway/gateway.log", "-setup", >> > "/home/peter/geneos/gateway/gateways/Demo Gateway/gateway.setup.xml", >> > "-licd-host", "localhost", "-ssl-certificate", >> > "/home/peter/geneos/gateway/gateways/Demo Gateway/gateway.pem", >> > "-ssl-certificate-key", "/home/peter/geneos/gateway/gateways/Demo >> > Gateway/gateway.key", "-ssl-certificate-chain", >> > "/home/peter/geneos/gateway/gateways/Demo Gateway/chain.pem", >> > "-licd-secure", "-key-file", >> > "/home/peter/geneos/gateway/gateway_shared/keyfiles/06761949.aes", >> > "-previous-key-file", >> > "/home/peter/geneos/gateway/gateway_shared/keyfiles/740424C5.aes"}, >> > Env:[]string{"TEST2=memory", "TEST=mytest2", >> > "LD_LIBRARY_PATH=/home/peter/geneos/packages/gateway/active_prod/lib64:/usr/lib64"}, >> > Dir:"/home/peter/geneos/gateway/gateways/Demo Gateway", >> > Stdin:io.Reader(nil), Stdout:(*os.File)(0xc000166288), >> > Stderr:(*os.File)(0xc000166288), ExtraFiles:[]*os.File(nil), >> > SysProcAttr:(*syscall.SysProcAttr)(0xc000000840), >> > Process:(*os.Process)(nil), ProcessState:(*os.ProcessState)(nil), >> > ctx:context.Context(nil), Err:error(nil), Cancel:(func() error)(nil), >> > WaitDelay:0, childIOFiles:[]io.Closer(nil), >> > parentIOPipes:[]io.Closer(nil), goroutine:[]func() error(nil), >> > goroutineErr:(<-chan error)(nil), ctxResult:(<-chan exec.ctxResult)(nil), >> > createdByStack:[]uint8(nil), lookPathErr:error(nil), >> > cachedLookExtensions:struct { in string; out string }{in:"", out:""}} >> > gateway "Demo Gateway" started with PID 55903 >> > >> > FDs 19 and above seem to be inherited: >> > >> > peter@thinkpad:~/cordial/tools/geneos$ lsof -p 55903 >> > COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME >> > gateway2. 55903 peter cwd DIR 259,2 4096 22284207 >> > /home/peter/geneos/gateway/gateways/Demo Gateway >> > gateway2. 55903 peter rtd DIR 259,2 4096 2 / >> > ... >> > gateway2. 55903 peter 19w REG 259,2 6014 22857682 >> > /home/peter/.vscode-server/data/logs/20241108T084719/remoteagent.log >> > gateway2. 55903 peter 20w REG 259,2 2000 22857683 >> > /home/peter/.vscode-server/data/logs/20241108T084719/ptyhost.log >> > gateway2. 55903 peter 21u CHR 5,2 0t0 91 /dev/ptmx >> > gateway2. 55903 peter 22u CHR 5,2 0t0 91 /dev/ptmx >> > gateway2. 55903 peter 23u CHR 5,2 0t0 91 /dev/ptmx >> > >> > Am I missing anything? >> > >> > Code (which is far from clean, sorry) is scattered around >> > https://github.com/ITRS-Group/cordial/blob/main/pkg/host/local.go#L214 >> >> >> Do you know what part of your program is opening those file >> descriptors? In particular, is it Go code or is it in some other >> language like C? If in Go, does it use calls like os.Open or does it >> use syscall.Open? I ask because calls like os.Open are careful to set >> the O_CLOEXEC flag that causes the descriptor to be closed when >> exec-ing a new process. Other languages, or syscall.Open, may not be >> so careful. >> >> Ian > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > To view this discussion visit > https://groups.google.com/d/msgid/golang-nuts/bcd6b1f8-23a9-4aaa-bb01-de868bffe6f2n%40googlegroups.com. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/golang-nuts/CAOyqgcVH9pTAKekOt9hRe53LXxF%3DS%2BRAKt6gVD9gwZc6RaBMnQ%40mail.gmail.com.