Voltar à lista
Linux x86_64Processos & threads#424

pidfd_send_signal

Envia um sinal a um processo referenciado por um pidfd (descritor de arquivo estável), em vez de por PID numérico.

Descrição

Resolve a condição de corrida clássica de `kill(pid, sig)`: entre obter um PID e enviar o sinal, o processo original pode ter terminado e o número ter sido reciclado para outro processo completamente diferente. Um pidfd, como qualquer descritor de arquivo, sempre se refere ao mesmo processo (ou fica inválido), nunca é 'reciclado' silenciosamente.

man 2Desde o kernel 5.1

Assinatura

int pidfd_send_signal(
    int pidfd,
    int sig,
    siginfo_t * info,
    unsigned int flags
);

Parâmetros

ParâmetroTipoDescrição
pidfdintDescritor de arquivo referenciando o processo alvo (obtido via pidfd_open ou clone/clone3).
sigintNúmero do sinal a enviar.
infosiginfo_t *Dados adicionais anexados ao sinal, ou NULL.
flagsunsigned intReservado; deve ser 0.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1pidfdint
rsiargumento 2sigint
rdxargumento 3infosiginfo_t *
r10argumento 4flagsunsigned int

Valor de retorno

0 em sucesso; -1 em erro, com errno definido.

Códigos de erro (errno)

EBADF(9)
Descritor de arquivo inválido.
EINVAL(22)
Argumento inválido.
EPERM(1)
Operação não permitida (falta de privilégio).
ESRCH(3)
Processo inexistente.

Relacionadas