어떻게 go 프로그램 에서 종료 신 호 를 캡 처 합 니까?
kill 을 실행 할 때 기본적으로 SIGTERM 신 호 를 프로그램 에 보 냅 니 다. 프로그램 이 이 신 호 를 받 았 을 때 다음 과 같은 집중 방식 이 나타 날 수 있 습 니 다.
다른 하 나 는 우리 가 프론트 데스크 톱 에서 실행 하 는 프로그램의 종료 입 니 다. 우 리 는 보통 ctrl - c 를 실행 하여 프로그램의 실행 을 종료 합 니 다. 이 조합 키 는 프로그램 에 SIGINT 명령 을 보 냅 니 다. 이 명령 도 프로그램 에서 캡 처 할 수 있 기 때문에 우 리 는 어떤 신호 명령 을 캡 처 하여 미리 정 의 된 종료 절 차 를 진행 해 야 하 는 지 알 게 되 었 습 니 다.
다음 에 우리 가 사용 하 는 코드 는 signal. Notify 함 수 를 이용 하여 두 가지 신 호 를 파이프 에 연결 하 는 것 입 니 다. 이 신 호 를 받 으 면 channel 에 전달 합 니 다. 또한 우 리 는 전문 적 인 goroutine 으로 이 channel 의 데 이 터 를 소비 합 니 다. 기본 적 인 상황 에서 첫 번 째 문 구 를 막 고 신호 가 전달 되면 청 소 를 하고 시스템 을 종료 합 니 다. 코드 는 다음 과 같 습 니 다.
package main
import (
"log"
"os"
"os/signal"
"sync"
"syscall"
"time"
)
func main() {
var stopLock sync.Mutex
stop := false
stopChan := make(chan struct{}, 1)
signalChan := make(chan os.Signal, 1)
go func() {
// ,
true
stopLock.Unlock()
log.Println("Cleaning before stop...")
stopChan struct{}{}
os.Exit(0)
}()
signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)
//
time.Sleep(10 * time.Second)
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.