>백엔드 개발 >Golang >Go 언어의 프로세스 제어 및 신호 처리

Go 언어의 프로세스 제어 및 신호 처리

PHPz
PHPz원래의
2023-06-02 08:21:391412검색

Go 언어는 단순성, 사용 용이성, 효율성 및 보안으로 인해 프로그래머들 사이에서 점점 인기가 높아지고 있습니다. Go 언어에서는 프로세스 제어와 신호 처리도 매우 중요한 부분입니다. 이 글에서는 Go 언어의 프로세스 제어와 신호 처리에 대해 살펴보겠습니다.

Go 언어의 프로세스 호출

Go 언어의 프로세스 제어는 여러 프로세스 간의 호출 및 제어를 실현할 수 있습니다. Go 언어는 프로세스를 시작하고 호출할 수 있는 os 라이브러리와 exec 라이브러리를 제공합니다. os 라이브러리에서 명령줄을 호출하면 새 프로세스를 생성하고 해당 출력을 현재 프로세스의 표준 출력 스트림에 바인딩할 수 있습니다. 또한 현재 프로세스의 표준 입력 스트림을 새로 생성된 프로세스로 가져올 수도 있습니다.

Go 언어에서는 os.StartProcess() 함수가 주로 새로운 프로세스를 생성하는 데 사용됩니다. 이 함수의 프로토타입은 다음과 같습니다.

func StartProcess(name string, args []string, attr os.ProcAttr) (os.Process, error)

이 중 name 매개변수는 실행 파일 경로를 나타냅니다. 새 프로세스 args 매개변수는 새 프로세스에 전달되는 명령줄 매개변수입니다. attr 매개변수는 환경 변수 및 작업 디렉터리와 같은 새 프로세스의 속성을 지정하는 데 사용할 수 있습니다.

프로세스 시작을 위한 샘플 코드는 다음과 같습니다.

package main

import (
    "fmt"
    "os"
)

func main() {
    cmd := exec.Command("ls", "-l")
    output, err := cmd.Output()
    if err != nil {
        panic(err)
    }
    fmt.Println(string(output))
}

이 예에서는 Command() 함수를 호출하여 ls 명령을 시작하고 해당 출력을 현재 프로세스의 표준 출력 스트림에 바인딩한 다음 마지막으로 Output을 호출합니다. ( ) 함수는 출력을 읽고 화면에 인쇄합니다.

신호 처리

신호는 운영 체제가 프로세스에 특정 신호를 보내고 프로세스가 이에 따라 이를 처리할 수 있도록 하는 프로세스 간 통신 메커니즘입니다. Go 언어에서는 os 라이브러리의 Signal 및 Signal.Notify 함수를 사용하여 신호를 등록하고 처리할 수 있습니다.

Signal 함수는 지정된 시그널의 시그널 객체를 반환하는 데 사용됩니다. 그 프로토타입은 다음과 같습니다.

func Signal(sig syscall.Signal) Signal

그 중 sig 매개변수는 시스템 호출 번호에 해당하는 시그널을 지정합니다. 예를 들어 SIGINT는 인터럽트를 나타냅니다. 반환된 Signal 개체는 예를 들어 Wait 메서드를 사용하여 신호 도착을 기다리는 데 사용할 수 있습니다.

Notify 함수는 프로세스의 신호 처리 함수를 등록하는 데 사용됩니다. 지정된 신호가 도착하면 해당 함수가 호출되어 처리됩니다. 함수 프로토타입은 다음과 같습니다.

func Notify(c chan<- os.Signal, sig ...os.Signal)

그 중 c 매개변수는 들어오는 신호를 수신하는 데 사용되는 채널이고 sig 매개변수는 이를 지정합니다. 등록해야 하는 신호 개체입니다. 샘플 코드는 다음과 같습니다.

package main

import (
    "fmt"
    "os"
    "os/signal"
    "syscall"
    "time"
)

func main() {
    c := make(chan os.Signal, 1)
    signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
    go func() {
        s := <-c
        fmt.Println("received signal:", s)
        os.Exit(1)
    }()

    fmt.Println("Start working...")
    for {
        fmt.Println("working...")
        time.Sleep(time.Second * 1)
    }
}

위 샘플 프로그램에서는 Notify 함수를 호출하여 SIGINT 및 SIGTERM 신호를 신호 파이프라인에 추가합니다. 대기 신호가 수신되면 프로그램은 즉시 종료됩니다. 신호 처리를 통해 프로그램의 실행과 종료를 매우 유연하게 제어할 수 있습니다.

요약

이 기사에서는 Go 언어의 프로세스 제어 및 신호 처리에 대해 소개합니다. Go 언어에서는 os 라이브러리 및 exec 라이브러리를 호출하여 프로세스 시작 및 제어가 가능하며, 신호 처리를 통해 프로세스 간 통신도 가능합니다. 메커니즘과 제어. 프로세스 제어 및 신호 처리를 마스터하면 프로그램 실행 및 종료를 보다 유연하게 제어할 수 있습니다.

위 내용은 Go 언어의 프로세스 제어 및 신호 처리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.