signal

package
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Sep 5, 2021 License: MIT Imports: 6 Imported by: 0

Documentation

Overview

Package signal provides the way to handle signal with github.com/oklog/run.

Example
package main

import (
	"fmt"
	"io"
	"syscall"

	"github.com/oklog/run"
	"github.com/takumakei/go-run/signal"
)

func main() {
	sigint := signal.Notify(syscall.SIGINT)
	defer sigint.Stop()
	var g run.Group
	g.Add(sigint.Receiver())
	g.Add(func() error { return io.EOF }, func(error) {})
	if err := signal.IgnoreError(g.Run()); err != nil {
		fmt.Println(err)
	}
}
Output:

EOF

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func Error

func Error(sig os.Signal) error

Error wraps run.SignalError{Signal: sig}.

func FromError

func FromError(err error) (os.Signal, bool)

FromError returns os.Signal of run.SignalError.Signal if err is type of run.SignalError, otherwise nil.

func IgnoreError

func IgnoreError(err error) error

IgnoreError returns nil if err is type of run.SignalError.

Types

type Signal

type Signal struct {
	C chan os.Signal
	// contains filtered or unexported fields
}

Signal has a channel type of `chan os.Signal` and a handler function type of `func(os.Signal) error`.

func Notify

func Notify(sig ...os.Signal) *Signal

Notify returns *Signal.

  • Signal#C = make(chan os.Signal, 4)
  • it calls signal.Notify(C, sig...)
  • Signal#DefaultHandler is set to the signal handler of Signal returned.

func (*Signal) Close

func (si *Signal) Close()

Close wraps close(si.C).

func (*Signal) DefaultHandler

func (si *Signal) DefaultHandler(sig os.Signal) error

DefaultHandler wraps si.Stop(), returns Error(sig).

func (*Signal) Receiver

func (si *Signal) Receiver() (exec func() error, intr func(error))

Receiver returns exec function and intr function, these can be used with run.Group#Add. exec waits a signal, then calls signal handler, returns its returned error if it is not nil. If the signal handler returns nil, exec does it again. exec returns immediately if intr is called.

EXAMPLE

sigint := signal.Notify(syscall.SIGINT)
defer sigint.Stop()
var g run.Group
g.Add(sigint.Receiver())

func (*Signal) SetHandler

func (si *Signal) SetHandler(f func(os.Signal) error)

SetHandler set f to si's signal handler if f is not nil, otherwise set si.DefaultHandler to it.

func (*Signal) Stop

func (si *Signal) Stop()

Stop wraps signal.Stop(si.C).

Jump to

Keyboard shortcuts

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