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 중국어 웹사이트의 기타 관련 기사를 참조하세요!