gproc

package
v2.4.2 Latest Latest
Warning

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

Go to latest
Published: May 26, 2023 License: MIT Imports: 31 Imported by: 1

Documentation

Overview

Package gproc implements management and communication for processes.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AddSigHandler

func AddSigHandler(handler SigHandler, signals ...os.Signal)

AddSigHandler adds custom signal handler for custom one or more signals.

func AddSigHandlerShutdown

func AddSigHandlerShutdown(handler ...SigHandler)

AddSigHandlerShutdown adds custom signal handler for shutdown signals: syscall.SIGINT, syscall.SIGQUIT, syscall.SIGKILL, syscall.SIGTERM, syscall.SIGABRT.

func IsChild

func IsChild() bool

IsChild checks and returns whether current process is a child process. A child process is forked by another gproc process.

func Listen

func Listen()

Listen blocks and does signal listening and handling.

func MustShell

func MustShell(ctx context.Context, cmd string, out io.Writer, in io.Reader)

MustShell performs as Shell, but it panics if any error occurs.

func MustShellExec

func MustShellExec(ctx context.Context, cmd string, environment ...[]string) string

MustShellExec performs as ShellExec, but it panics if any error occurs.

func MustShellRun

func MustShellRun(ctx context.Context, cmd string)

MustShellRun performs as ShellRun, but it panics if any error occurs.

func PPid

func PPid() int

PPid returns the custom parent pid if exists, or else it returns the system parent pid.

func PPidOS

func PPidOS() int

PPidOS returns the system parent pid of current process. Note that the difference between PPidOS and PPid function is that the PPidOS returns the system ppid, but the PPid functions may return the custom pid by gproc if the custom ppid exists.

func Pid

func Pid() int

Pid returns the pid of current process.

func SearchBinary

func SearchBinary(file string) string

SearchBinary searches the binary `file` in current working folder and PATH environment.

func SearchBinaryPath

func SearchBinaryPath(file string) string

SearchBinaryPath searches the binary `file` in PATH environment.

func Send

func Send(pid int, data []byte, group ...string) error

Send sends data to specified process of given pid.

func SetPPid

func SetPPid(ppid int) error

SetPPid sets custom parent pid for current process.

func Shell

func Shell(ctx context.Context, cmd string, out io.Writer, in io.Reader) error

Shell executes command `cmd` synchronously with given input pipe `in` and output pipe `out`. The command `cmd` reads the input parameters from input pipe `in`, and writes its output automatically to output pipe `out`.

func ShellExec

func ShellExec(ctx context.Context, cmd string, environment ...[]string) (result string, err error)

ShellExec executes given command `cmd` synchronously and returns the command result.

func ShellRun

func ShellRun(ctx context.Context, cmd string) error

ShellRun executes given command `cmd` synchronously and outputs the command result to the stdout.

func StartTime

func StartTime() time.Time

StartTime returns the start time of current process.

func Uptime

func Uptime() time.Duration

Uptime returns the duration which current process has been running

Types

type Manager

type Manager struct {
	// contains filtered or unexported fields
}

Manager is a process manager maintaining multiple processes.

func NewManager

func NewManager() *Manager

NewManager creates and returns a new process manager.

func (*Manager) AddProcess

func (m *Manager) AddProcess(pid int)

AddProcess adds a process to current manager. It does nothing if the process with given `pid` does not exist.

func (*Manager) Clear

func (m *Manager) Clear()

Clear removes all processes in current manager.

func (*Manager) GetProcess

func (m *Manager) GetProcess(pid int) *Process

GetProcess retrieves and returns a Process object. It returns nil if it does not find the process with given `pid`.

func (*Manager) KillAll

func (m *Manager) KillAll() error

KillAll kills all processes in current manager.

func (*Manager) NewProcess

func (m *Manager) NewProcess(path string, args []string, environment []string) *Process

NewProcess creates and returns a Process object.

func (*Manager) Pids

func (m *Manager) Pids() []int

Pids retrieves and returns all process id array in current manager.

func (*Manager) Processes

func (m *Manager) Processes() []*Process

Processes retrieves and returns all processes in current manager.

func (*Manager) RemoveProcess

func (m *Manager) RemoveProcess(pid int)

RemoveProcess removes a process from current manager.

func (*Manager) Send

func (m *Manager) Send(data []byte)

Send sends data bytes to all processes in current manager.

func (*Manager) SendTo

func (m *Manager) SendTo(pid int, data []byte) error

SendTo sneds data bytes to specified processe in current manager.

func (*Manager) SignalAll

func (m *Manager) SignalAll(sig os.Signal) error

SignalAll sends a signal `sig` to all processes in current manager.

func (*Manager) Size

func (m *Manager) Size() int

Size returns the size of processes in current manager.

func (*Manager) WaitAll

func (m *Manager) WaitAll()

WaitAll waits until all process exit.

type MsgRequest

type MsgRequest struct {
	SenderPid   int    // Sender PID.
	ReceiverPid int    // Receiver PID.
	Group       string // Message group name.
	Data        []byte // Request data.
}

MsgRequest is the request structure for process communication.

func Receive

func Receive(group ...string) *MsgRequest

Receive blocks and receives message from other process using local TCP listening. Note that, it only enables the TCP listening service when this function called.

type MsgResponse

type MsgResponse struct {
	Code    int    // 1: OK; Other: Error.
	Message string // Response message.
	Data    []byte // Response data.
}

MsgResponse is the response structure for process communication.

type Process

type Process struct {
	exec.Cmd
	Manager *Manager
	PPid    int
}

Process is the struct for a single process.

func NewProcess

func NewProcess(path string, args []string, environment ...[]string) *Process

NewProcess creates and returns a new Process.

func NewProcessCmd

func NewProcessCmd(cmd string, environment ...[]string) *Process

NewProcessCmd creates and returns a process with given command and optional environment variable array.

func (*Process) Kill

func (p *Process) Kill() (err error)

Kill causes the Process to exit immediately.

func (*Process) Pid

func (p *Process) Pid() int

Pid retrieves and returns the PID for the process.

func (*Process) Release

func (p *Process) Release() error

Release releases any resources associated with the Process p, rendering it unusable in the future. Release only needs to be called if Wait is not.

func (*Process) Run

func (p *Process) Run(ctx context.Context) error

Run executes the process in blocking way.

func (*Process) Send

func (p *Process) Send(data []byte) error

Send sends custom data to the process.

func (*Process) Signal

func (p *Process) Signal(sig os.Signal) error

Signal sends a signal to the Process. Sending Interrupt on Windows is not implemented.

func (*Process) Start

func (p *Process) Start(ctx context.Context) (int, error)

Start starts executing the process in non-blocking way. It returns the pid if success, or else it returns an error.

type SigHandler

type SigHandler func(sig os.Signal)

SigHandler defines a function type for signal handling.

Jump to

Keyboard shortcuts

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