Linux x86_64Depuração & tracing#312
kcmp
Compara se dois processos compartilham o mesmo recurso do kernel (espaço de memória, tabela de fds, etc.).
Descrição
Permite descobrir, por exemplo, se dois PIDs são na verdade threads do mesmo processo, ou se dois descritores de arquivo em processos diferentes apontam para a mesma file description subjacente — informação usada por ferramentas de checkpoint/restore (CRIU) e depuradores.
man 2Desde o kernel 3.5
Assinatura
int kcmp(
pid_t pid1,
pid_t pid2,
int type,
unsigned long idx1,
unsigned long idx2
);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| pid1 | pid_t | Primeiro processo a comparar. |
| pid2 | pid_t | Segundo processo a comparar. |
| type | int | Recurso a comparar: KCMP_FILE, KCMP_VM, KCMP_FILES, KCMP_FS, KCMP_SIGHAND, KCMP_IO, KCMP_SYSVSEM, KCMP_EPOLL_TFD. |
| idx1 | unsigned long | Índice adicional (ex.: número do descritor de arquivo) quando exigido por `type`. |
| idx2 | unsigned long | Índice adicional correspondente para `pid2`. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | pid1pid_t |
| rsi | argumento 2 | pid2pid_t |
| rdx | argumento 3 | typeint |
| r10 | argumento 4 | idx1unsigned long |
| r8 | argumento 5 | idx2unsigned long |
Valor de retorno
Um valor ordenável (menor que, igual a, ou maior que zero) indicando a ordem relativa dos dois recursos no kernel — não é um booleano direto; use o resultado 0 para igualdade. -1 em erro, com errno definido.
Códigos de erro (errno)
- EBADF(9)
- Descritor de arquivo inválido.
- EINVAL(22)
- Argumento inválido.
- ENOENT(2)
- Arquivo ou diretório inexistente.
- EPERM(1)
- Operação não permitida (falta de privilégio).
- ESRCH(3)
- Processo inexistente.