Por que o brk (0) é chamado?

4

Em um primeiro shell eu executo o comando tail sem argumento.

Em um segundo shell eu mato o primeiro rabo usando strace para monitorar as chamadas do sistema.

qdii@nomada ~ $ strace kill 1713
execve("/bin/kill", ["kill", "1713"], [/* 82 vars */]) = 0
brk(0)                                  = 0x2533000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9dacfe8000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3

Eu não sabia o comando brk , então pesquisei e descobri que ele altera o final do segmento de dados do processo. Por que kill faria isso? especialmente configurar o segmento de dados para 0 parece fazer pouco sentido.

    
por qdii 13.05.2013 / 13:38

1 resposta

5

A biblioteca de tempo de execução chama sbrk para ler o final atual do segmento de dados. sbrk é implementado na parte superior do brk syscall; Como você pode ver, chamar brk com um endereço inválido apenas retorna o valor atual.

    
por 13.05.2013 / 13:45