"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Os.FindProcess é suficiente para verificar com segurança a existência do processo?

Os.FindProcess é suficiente para verificar com segurança a existência do processo?

Publicado em 2024-11-22
Navegar:793

Is os.FindProcess Enough to Reliably Verify Process Existence?

Os.FindProcess é suficiente para verificar a existência do processo?

Em cenários onde o PID de um processo é conhecido, você pode se perguntar se utilizar os.FindProcess por si só estabelece adequadamente a existência do processo. Este artigo investiga esse cenário específico e fornece uma abordagem alternativa que aproveita os princípios do sistema operacional. na verificação da presença de um processo. No entanto, considerar apenas se retorna um erro é insuficiente. Exceções, como problemas de permissão, podem levar a falsos negativos.

Abordagem alternativa usando kill -s 0

  • Este método aproveita a tradição Unix de enviar um sinal de 0 para um processo. A falta de erro indica a existência do processo.

A seguinte função Go demonstra isso:

import ( "registro" "os/exec" "strconv" ) func checkPid(pid int) bool { fora, err := exec.Command("kill", "-s", "0", strconv.Itoa(pid)).CombinedOutput() se errar! = nulo { log.Println(erro) } if string(saída) == "" { retornar verdadeiro // pid existe } retornar falso }
  • Detecção aprimorada de existência de processo
import (
    "log"
    "os/exec"
    "strconv"
)

func checkPid(pid int) bool {
    out, err := exec.Command("kill", "-s", "0", strconv.Itoa(pid)).CombinedOutput()
    if err != nil {
        log.Println(err)
    }

    if string(out) == "" {
        return true // pid exist
    }
    return false
}

Por exemplo, se o comando kill -s 0 resultar em um erro de "operação não permitida", ele sugere que o processo existe, mas não pertence ao usuário que está tentando executar o processo. verificação.

    Conclusão
  • Embora os.FindProcess forneça indicações iniciais da existência do processo, adotar a abordagem tradicional do Unix usando kill -s 0 oferece verificação mais abrangente e insights sobre propriedade de processos.
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3