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âmetro | Tipo | Descrição |
|---|---|---|
| pidfd | int | pidfd do processo alvo. |
| targetfd | int | Número do descritor no processo alvo a duplicar. |
| flags | unsigned int | Reservado; deve ser 0. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | pidfdint |
| rsi | argumento 2 | targetfdint |
| rdx | argumento 3 | flagsunsigned 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.