//go:build linux
// +build linux

package emulators

import "syscall"

// makeSysProcAttrWithPdeathsigSIGKILL returns a syscall.SysProcAttr struct such that any emulators
// started via an exec.Cmd will be killed as soon as the parent process (e.g. a Go test) dies.
//
// This function uses a Linux-only field of the syscall.SysProcAttr struct. Trying to compile this
// file for a non-Linux target will result in the following compilation error:
//
//	unknown field 'Pdeathsig' in struct literal of type syscall.SysProcAttr
//
// For this reason, this file is annotated with a "+build linux" build tag, which will exclude it
// from compilation for non-Linux targets. A separate, noop implementation for all other compilation
// targets is provided in a sibling file, so as not to break the build.
//
// See https://golang.org/cmd/go/#hdr-Build_constraints for more information on build tags.
func makeSysProcAttrWithPdeathsigSIGKILL() *syscall.SysProcAttr {
	return &syscall.SysProcAttr{
		// Under Bazel and RBE, emulators are launched by each individual go_test Bazel target. The
		// below setting kills the emulator processes (and any other child processes) as soon as the
		// parent process (i.e. the test runner) dies.
		//
		// If we don't do this, the emulators will continue running indefinitely, and Bazel will
		// eventually time out while waiting for these child processes to die.
		//
		// This setting is Linux-only, but that's OK because our RBE instance consists of Linux
		// machines exclusively. Alternative approaches include adding a TestMain function to our
		// emulator tests that launches the emulators before running the test cases and kills them
		// afterwards, or leveraging the test_on_env Bazel macro to run an environment binary
		// alongside the tests which controls the emulators' lifecycle. Any of these approaches would
		// work on non-Linux OSes as well.
		Pdeathsig: syscall.SIGKILL,
	}
}
