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

Метод os.Process.Kill

Метод os.Process.Kill завершает процесс, отправляя ему сигнал SIGKILL (в Unix-подобных системах) или аналогичный сигнал принудительного завершения в Windows. Этот метод не передает процессу возможности корректно завершить работу — он немедленно убивает процесс. В качестве приемника метод принимает указатель на структуру os.Process, полученную при запуске процесса через os.StartProcess или os.FindProcess. Метод возвращает ошибку, если завершить процесс не удалось.

Синтаксис

err := p.Kill()

Пример

Давайте запустим внешнюю программу, которая выполняется 5 секунд, и завершим ее принудительно через 1 секунду:

package main import ( "fmt" "os" "os/exec" "time" ) func main() { cmd := exec.Command("sleep", "5") if err := cmd.Start(); err != nil { fmt.Println("Error starting process:", err) return } time.Sleep(1 * time.Second) if err := cmd.Process.Kill(); err != nil { fmt.Println("Error killing process:", err) return } fmt.Println("Process killed successfully") }

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

"Process killed successfully"

В этом примере программа sleep 5 была запущена, но через секунду была принудительно завершена методом Kill, не дожидаясь естественного окончания.

Пример

Давайте попробуем завершить уже завершенный процесс и обработаем ошибку:

package main import ( "fmt" "os" "os/exec" "time" ) func main() { cmd := exec.Command("sleep", "1") if err := cmd.Start(); err != nil { fmt.Println("Error starting process:", err) return } time.Sleep(2 * time.Second) if err := cmd.Process.Kill(); err != nil { fmt.Println("Error:", err) return } fmt.Println("Process killed") }

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

"Error: os: process already finished"

Здесь мы видим, что попытка завершить уже завершившийся процесс приводит к ошибке, которую нужно корректно обрабатывать в программе.

Пример

Давайте используем метод Kill вместе с Wait для дожидания завершения процесса после отправки сигнала:

package main import ( "fmt" "os/exec" "time" ) func main() { cmd := exec.Command("sleep", "10") if err := cmd.Start(); err != nil { fmt.Println("Error starting process:", err) return } go func() { time.Sleep(2 * time.Second) if err := cmd.Process.Kill(); err != nil { fmt.Println("Kill error:", err) } }() if err := cmd.Wait(); err != nil { fmt.Println("Wait error:", err) } fmt.Println("Process finished") }

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

"Wait error: signal: killed" "Process finished"

В этом примере метод Wait возвращает ошибку сигнала killed, что подтверждает факт принудительного завершения процесса.

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

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