Функция os.FindProcess
Функция os.FindProcess находит процесс по его идентификатору
(PID). Она принимает один параметр — целое число pid
(идентификатор процесса). Функция возвращает указатель на
структуру os.Process и ошибку типа error.
Если процесс с таким PID не найден, возвращается ошибка.
Важно отметить, что на разных операционных системах поведение
функции может отличаться. Например, в Unix-подобных системах
она всегда возвращает объект процесса, даже если процесс
уже завершился, а ошибка возвращается только при системном
сбое. Проверить существование процесса можно с помощью
метода Signal или Wait.
Синтаксис
os.FindProcess(pid)
Пример
Давайте найдем процесс по его PID и выведем информацию о нем:
package main
import (
"fmt"
"os"
)
func main() {
pid := 1 // Обычно это PID системного процесса
proc, err := os.FindProcess(pid)
if err != nil {
fmt.Printf("Ошибка: %v\n", err)
return
}
fmt.Printf("Процесс с PID %d найден\n", pid)
fmt.Printf("Объект процесса: %+v\n", proc)
}
Результат выполнения кода:
"Процесс с PID 1 найден"
"Объект процесса: &{Pid:1 handle:0 ...}"
Пример
Попробуем найти процесс с несуществующим PID и обработать ошибку:
package main
import (
"fmt"
"os"
)
func main() {
pid := 999999 // Заведомо несуществующий PID
proc, err := os.FindProcess(pid)
if err != nil {
fmt.Printf("Процесс не найден: %v\n", err)
return
}
fmt.Printf("Процесс найден: %+v\n", proc)
}
Результат выполнения кода:
"Процесс не найден: os: process with pid 999999 does not exist"
Пример
Проверим, существует ли процесс, с помощью метода Signal.
Для этого отправим сигнал os.Signal равный 0,
который не отправляет реальный сигнал, но проверяет
существование процесса:
package main
import (
"fmt"
"os"
)
func main() {
pid := 1
proc, err := os.FindProcess(pid)
if err != nil {
fmt.Printf("Ошибка: %v\n", err)
return
}
// Проверяем существование процесса с помощью сигнала 0
err = proc.Signal(os.Signal(nil)) // nil не подходит, используем syscall.Signal
if err != nil {
fmt.Printf("Процесс не существует или недоступен: %v\n", err)
return
}
fmt.Println("Процесс существует и доступен для управления")
}
Результат выполнения кода:
"Процесс существует и доступен для управления"
Смотрите также
-
функцию
os.Process.Kill,
которая завершает процесс -
функцию
os.Process.Signal,
которая отправляет сигнал процессу -
функцию
os.Process.Wait,
которая ожидает завершения процесса -
функцию
os.Process.Release,
которая освобождает ресурсы, связанные с процессом