Метод 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,
которая находит процесс по его идентификатору