From c232a309a6795f3e7768e42cb3687c306d7d4bf2 Mon Sep 17 00:00:00 2001 From: badkaktus Date: Sat, 12 Oct 2019 22:01:03 +0300 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=B8=D0=B3=D0=BD=D0=B0=D0=BB=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples.txt | 2 +- examples/signals/signals.go | 39 ++++++++++++++++++++----------------- examples/signals/signals.sh | 9 +++++---- 3 files changed, 27 insertions(+), 23 deletions(-) diff --git a/examples.txt b/examples.txt index b6adc45..78f9a30 100644 --- a/examples.txt +++ b/examples.txt @@ -70,5 +70,5 @@ HTTP клиенты (HTTP Clients) HTTP серверы (HTTP Servers) Порождающие процессы (Spawning Processes) Исполняющие процессы (Exec'ing Processes) -Signals +Сигналы (Signals) Exit diff --git a/examples/signals/signals.go b/examples/signals/signals.go index 4cd373b..857d64b 100644 --- a/examples/signals/signals.go +++ b/examples/signals/signals.go @@ -1,9 +1,10 @@ -// Sometimes we'd like our Go programs to intelligently -// handle [Unix signals](http://en.wikipedia.org/wiki/Unix_signal). -// For example, we might want a server to gracefully -// shutdown when it receives a `SIGTERM`, or a command-line -// tool to stop processing input if it receives a `SIGINT`. -// Here's how to handle signals in Go with channels. +// Иногда нам хотелось бы, чтобы наши программы на Go +// интеллектуально обрабатывали [сигналы Unix](http://en.wikipedia.org/wiki/Unix_signal). +// Например, мы можем захотеть, чтобы сервер корректно +// завершил работу при получении `SIGTERM`, или инструмент +// командной строки остановил обработку ввода, если он +// получил `SIGINT`. Вот как обрабатывать сигналы в Go +// с каналами. package main @@ -16,20 +17,21 @@ import ( func main() { - // Go signal notification works by sending `os.Signal` - // values on a channel. We'll create a channel to - // receive these notifications (we'll also make one to - // notify us when the program can exit). + // Уведомление о выходе сигнала работает путем + // отправки значений `os.Signal` в канал. Мы создадим + // канал для получения этих уведомлений (мы также + // создадим канал, чтобы уведомить нас, когда программа + // может выйти). sigs := make(chan os.Signal, 1) done := make(chan bool, 1) - // `signal.Notify` registers the given channel to - // receive notifications of the specified signals. + // `signal.Notify` регистрирует данный канал для + // получения уведомлений об указанных сигналах. signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) - // This goroutine executes a blocking receive for - // signals. When it gets one it'll print it out - // and then notify the program that it can finish. + // Эта горутина выполняет блокировку приема сигналов. + // Когда она получит его, то распечатает его, а + // затем уведомит программу, что она может быть завершена. go func() { sig := <-sigs fmt.Println() @@ -37,9 +39,10 @@ func main() { done <- true }() - // The program will wait here until it gets the - // expected signal (as indicated by the goroutine - // above sending a value on `done`) and then exit. + // Программа будет ждать здесь, пока не получит + // ожидаемый сигнал (как указано в приведенной + // выше процедуре, отправляющей значение в `done`), + // и затем завершится. fmt.Println("awaiting signal") <-done fmt.Println("exiting") diff --git a/examples/signals/signals.sh b/examples/signals/signals.sh index 78b5570..d116a8c 100644 --- a/examples/signals/signals.sh +++ b/examples/signals/signals.sh @@ -1,7 +1,8 @@ -# When we run this program it will block waiting for a -# signal. By typing `ctrl-C` (which the -# terminal shows as `^C`) we can send a `SIGINT` signal, -# causing the program to print `interrupt` and then exit. +# Когда мы запустим эту программу, она заблокирует +# ожидание сигнала. Набрав `ctrl-C` (который терминал +# показывает как `^C`), мы можем послать сигнал `SIGINT`, +# в результате чего программа напечатает `interrupt` +# и затем выйдет. $ go run signals.go awaiting signal ^C