Voltar à lista
Linux x86_64Processos & threads#438

pidfd_getfd

Obtém uma cópia de um descritor de arquivo aberto em outro processo, referenciado por pidfd.

Descrição

Complementa `process_vm_readv`/`ptrace` para ferramentas de depuração e checkpoint/restore que precisam acessar não apenas a memória, mas também os descritores de arquivo abertos de outro processo.

man 2Desde o kernel 5.6

Atenção

Exige o mesmo nível de permissão que `ptrace(PTRACE_ATTACH)` exigiria sobre o processo alvo, precisamente por dar acesso equivalente a espiar/controlar seus recursos.

Assinatura

int pidfd_getfd(int pidfd, int targetfd, unsigned int flags);

Parâmetros

ParâmetroTipoDescrição
pidfdintpidfd do processo alvo.
targetfdintNúmero do descritor no processo alvo a duplicar.
flagsunsigned intReservado; deve ser 0.

Registradores (x86_64)

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

Valor de retorno

Uma cópia do descritor no processo chamador em sucesso; -1 em erro, com errno definido.

Códigos de erro (errno)

EBADF(9)
Descritor de arquivo inválido.
EPERM(1)
Operação não permitida (falta de privilégio).
ESRCH(3)
Processo inexistente.
ENOMEM(12)
Memória insuficiente para completar a operação.

Relacionadas