РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1430 of 1593 menu

Метод os.Process.Signal

Метод os.Process.Signal отправляет сигнал процессу, представленному объектом os.Process. В первый параметр метод принимает сигнал типа os.Signal, который нужно отправить процессу. Метод возвращает ошибку error, если отправка сигнала не удалась.

Синтаксис

err := process.Signal(sig)

Пример

Давайте отправим сигнал os.Interrupt процессу, который был запущен с помощью os.StartProcess:

package main import ( "fmt" "os" "time" ) func main() { attr := &os.ProcAttr{ Files: []*os.File{os.Stdin, os.Stdout, os.Stderr}, } process, err := os.StartProcess("/bin/sleep", []string{"sleep", "30"}, attr) if err != nil { fmt.Println("Error starting process:", err) return } time.Sleep(2 * time.Second) err = process.Signal(os.Interrupt) if err != nil { fmt.Println("Error sending signal:", err) return } fmt.Println("Signal sent successfully") }

Результат выполнения кода:

"Signal sent successfully"

Пример

Давайте отправим сигнал os.Kill процессу для его немедленного завершения:

package main import ( "fmt" "os" "time" ) func main() { attr := &os.ProcAttr{ Files: []*os.File{os.Stdin, os.Stdout, os.Stderr}, } process, err := os.StartProcess("/bin/sleep", []string{"sleep", "60"}, attr) if err != nil { fmt.Println("Error starting process:", err) return } time.Sleep(1 * time.Second) err = process.Signal(os.Kill) if err != nil { fmt.Println("Error sending signal:", err) return } fmt.Println("Kill signal sent successfully") }

Результат выполнения кода:

"Kill signal sent successfully"

Пример

Давайте отправим пользовательский сигнал syscall.SIGTERM процессу и проверим его состояние:

package main import ( "fmt" "os" "syscall" "time" ) func main() { attr := &os.ProcAttr{ Files: []*os.File{os.Stdin, os.Stdout, os.Stderr}, } process, err := os.StartProcess("/bin/sleep", []string{"sleep", "45"}, attr) if err != nil { fmt.Println("Error starting process:", err) return } time.Sleep(2 * time.Second) err = process.Signal(syscall.SIGTERM) if err != nil { fmt.Println("Error sending signal:", err) return } state, err := process.Wait() if err != nil { fmt.Println("Error waiting for process:", err) return } fmt.Printf("Process exited with status: %d", state.ExitCode()) }

Результат выполнения кода:

"Process exited with status: 143"

Смотрите также

  • метод os.Process.Kill,
    который отправляет сигнал завершения процессу
  • метод os.Process.Wait,
    который ожидает завершения процесса
  • метод os.Process.Release,
    который освобождает ресурсы процесса
  • функцию os.FindProcess,
    которая находит процесс по его идентификатору
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить