Voltar à lista
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âmetroTipoDescrição
pid1pid_tPrimeiro processo a comparar.
pid2pid_tSegundo processo a comparar.
typeintRecurso a comparar: KCMP_FILE, KCMP_VM, KCMP_FILES, KCMP_FS, KCMP_SIGHAND, KCMP_IO, KCMP_SYSVSEM, KCMP_EPOLL_TFD.
idx1unsigned longÍndice adicional (ex.: número do descritor de arquivo) quando exigido por `type`.
idx2unsigned longÍndice adicional correspondente para `pid2`.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1pid1pid_t
rsiargumento 2pid2pid_t
rdxargumento 3typeint
r10argumento 4idx1unsigned long
r8argumento 5idx2unsigned 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.

Relacionadas