Linux x86_64Memória#440
process_madvise
Como madvise, mas aplicado à memória de outro processo (com permissão adequada).
Descrição
Permite que um gerenciador de memória externo (ex.: Android's lmkd/ActivityManager) libere ou ajuste o cache de páginas de outros processos sob pressão de memória, sem exigir cooperação ativa deles.
man 2Desde o kernel 5.10
Assinatura
ssize_t process_madvise(
int pidfd,
const struct iovec * iovec,
size_t vlen,
int advice,
unsigned int flags
);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| pidfd | int | pidfd do processo alvo (ver pidfd_open). |
| iovec | const struct iovec * | Vetor de regiões de memória alvo no processo remoto. |
| vlen | size_t | Número de elementos em `iovec`. |
| advice | int | Dica de uso, ex.: MADV_COLD, MADV_PAGEOUT. |
| 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 | iovecconst struct iovec * |
| rdx | argumento 3 | vlensize_t |
| r10 | argumento 4 | adviceint |
| r8 | argumento 5 | flagsunsigned int |
Valor de retorno
Número de bytes processados em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EINVAL(22)
- Argumento inválido.
- EPERM(1)
- Operação não permitida (falta de privilégio).
- ESRCH(3)
- Processo inexistente.
- EBADF(9)
- Descritor de arquivo inválido.