Quando um processo do servidor é iniciado, ele emite algumas chamadas do sistema ( socket()
e listen()
). O sistema então abre a porta e cria um descritor de arquivo de soquete para o processo interagir. Você pode ver isso com:
Encontre o ID do processo mestre do Apache:
root@frisbee:~# ps -ef | grep apache | grep root
root 27440 1 0 16:06 ? 00:00:00 /usr/sbin/apache2 -k start
Acesse /proc/$pid/fd
e veja os sockets:
root@frisbee:~# ls -l /proc/27440/fd | grep socket
lrwx------ 1 root root 64 apr 16 16:12 3 -> socket:[518486]
lrwx------ 1 root root 64 apr 16 16:12 4 -> socket:[518487]
Aqui você pode ver que existem dois sockets abertos pelo Apache. O processo Apache internamente pode usar descritores de arquivos 3 & 4 para ler / gravar dados através da conexão de rede.
Você pode encontrar o mapeamento entre soquetes e portas de escuta com lsof
:
root@frisbee:~# lsof | egrep 'IPv6.*(518486|518487)'
apache2 27440 root 4u IPv6 518487 0t0 TCP *:http (LISTEN)
apache2 27445 www-data 4u IPv6 518487 0t0 TCP *:http (LISTEN)
apache2 27446 www-data 4u IPv6 518487 0t0 TCP *:http (LISTEN)
apache2 27447 www-data 4u IPv6 518487 0t0 TCP *:http (LISTEN)
apache2 27448 www-data 4u IPv6 518487 0t0 TCP *:http (LISTEN)
apache2 27449 www-data 4u IPv6 518487 0t0 TCP *:http (LISTEN)
Existem vários processos do Apache usando o mesmo descritor de arquivo (aberto pelo processo em execução como root
, porque é uma porta privilegiada). Estes são os trabalhadores do Apache.
Uma maneira mais fácil de visualizar o link entre a porta e o processo é usar o comando netstat
:
mtak@frisbee:~$ sudo netstat -tulpn | grep apache
tcp6 0 0 :::80 :::* LISTEN 4269/apache2