proc

package
v0.1.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 15, 2026 License: AGPL-3.0 Imports: 3 Imported by: 0

Documentation

Overview

Package proc provides platform-agnostic process management with safety guarantees.

It abstracts away OS-specific details for reliable process termination:

  • Windows: Uses Job Objects to ensure child processes are killed when the parent exits.
  • Linux: Uses Pdeathsig (SIGKILL) for the same guarantee.

Usage:

cmd := exec.Command("ping", "google.com")
_ = proc.Start(cmd)
cmd.Wait()

Index

Examples

Constants

This section is empty.

Variables

View Source
var StrictMode bool

StrictMode if true, will cause Start to return an error on unsupported platforms instead of just logging a warning. Default is false.

Functions

func Start

func Start(cmd *exec.Cmd) error

Start starts the specified command but ensures that the child process is killed if the parent process (this process) dies.

On Linux, it uses SysProcAttr.Pdeathsig (SIGKILL). On Windows, it uses Job Objects (JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE).

On other platforms, it falls back to cmd.Start() and logs a warning, unless StrictMode is set to true, in which case it returns an error.

This is a safer alternative to cmd.Start() for long-running child processes.

Example
package main

import (
	"context"
	"fmt"
	"os/exec"
	"time"

	"github.com/aretw0/procio/proc"
)

func main() {
	ctx, cancel := context.WithTimeout(context.Background(), 100*time.Millisecond)
	defer cancel()

	// Start a process. proc.Start wraps the standard exec.Cmd to provide
	// platform-specific guarantees (Job Objects on Windows, Pdeathsig on Linux)
	// that ensure child processes are terminated when the parent process exits.
	cmd := exec.CommandContext(ctx, "sleep", "1")

	// Start the process with hygiene guarantees.
	if err := proc.Start(cmd); err != nil {
		fmt.Println("Error starting process:", err)
		return
	}

	// Wait for process to finish or context to be cancelled.
	_ = cmd.Wait()
}

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL