3.7. Processos

O FreeBSD é um sistema operacional multi-tarefa. Isso significa que ele cria um ambiente onde os recursos computacionais são divididos de forma à parecer que mais de um programa é executado ao mesmo tempo. Cada processo sendo executado à qualquer momento, é chamado de um processo. Todo comando que você executar, iniciará ao menos um novo processo, e existem vários processos do sistema que estão sempre em execussão, mantendo a funcionalidade do ambiente como um todo.

Cada processo é identificado de forma única com um número, que é chamado de identificação do processo, ou process ID, ou então a forma abreviada e mais comum, PID, e, assim como os arquivos, cada processo também tem um dono e grupo. As informações sobre dono e grupo são utilizadas com o intúito de determinar que arquivos e dispositivos o processo pode abrir, utilizando as permissões discutidas anteriormente. A maioria dos processos tem ainda um processo pai. O processo pai é o processo que o iniciou. Por exemplo, quando você digita um comando em uma shell, então essa shell é um processo, e todo comando executado é outro processo. Todo comando executado desta forma terá sua shell como o processo pai. A única excessão é um processo especial chamado de init(8). O init é sempre o primeiro processo do sistema, portanto seu PID é sempre 1. O init é executado automaticamente pelo kernel quando o FreeBSD é iniciado.

Dois comandos são particularmente úteis para verificar os processos ativos no sistema, o ps(1) e o top(1). O comando ps é usado para apresentar uma lista estática dos processos sendo executados no momento, e pode apresentar seu PID, quanta memória o processo está utilizando, a linha de comando que o iniciou, e assim por diante. O comando top apresenta todos os processos em execussão, e atualiza a forma como os apresenta na tela a cada poucos segundos, de forma que você possa acompanhar o que o computador está fazendo.

Por padrão o ps apenas apresenta os comandos que estão sendo executados por você, e cuja propriedade também seja sua. Por exemplo:

% ps
  PID TT STAT      TIME COMMAND
  298 p0 Ss     0:01.10 tcsh
 7078 p0 S      2:40.88 xemacs mdoc.xsl (xemacs-21.1.14)
37393 p0 I      0:03.11 xemacs freebsd.dsl (xemacs-21.1.14)
48630 p0 S      2:50.89 /usr/local/lib/netscape-linux/navigator-linux-4.77.bi
48730 p0 IW     0:00.00 (dns helper) (navigator-linux-)
72210 p0 R+     0:00.00 ps
  390 p1 Is     0:01.14 tcsh
 7059 p2 Is+    1:36.18 /usr/local/bin/mutt -y
 6688 p3 IWs    0:00.00 tcsh
10735 p4 IWs    0:00.00 tcsh
20256 p5 IWs    0:00.00 tcsh
  262 v0 IWs    0:00.00 -tcsh (tcsh)
  270 v0 IW+    0:00.00 /bin/sh /usr/X11R6/bin/startx -- -bpp 16
  280 v0 IW+    0:00.00 xinit /home/nik/.xinitrc -- -bpp 16
  284 v0 IW     0:00.00 /bin/sh /home/nik/.xinitrc
  285 v0 S      0:38.45 /usr/X11R6/bin/sawfish

Como você pode acompanhar neste exemplo, a saída do comando ps(1) é organizada em várias colunas. PID é a identificação do processo discutida anteriormente. PIDs são atribuíudos à partir do 1, e vão até 99999, e reiniciam a contagem quando ultrapassa esse valor. A coluna TT posta em que terminal o programa esta sendo executado, e pode seguramente ser ignorado no momento. STAT apresenta o estado atual do programa, e, mais uma vez, vamos ignora-lo por hora. TIME indica a quantidade de tempo que o programa está em execussão na CPU em questão -- normalmente não é o tempo total desde que o processo foi iniciado, e sim tempo de execussão, uma vez que vários programas ficam um bom tempo esperando que algo aconteça para eles utilizarem tempo de processamento da CPU. Finalmente, COMMAND é a linha de comando utilizada para executar o programa em questão.

ps(1) suporta uma série de opções distintas que modificam as informações apresentadas. Um dos cunjuntos mais úteis de opções é auxww. a apresenta informações sobre todos os processos em execussão, não apenas os de sua propriedade. u apresenta o nome do usuário que é o dono do processo, bem como o uso de memória do mesmo. x apresenta informações sobre processos daemon, e ww faz o ps(1) apresentar a linha de comando completa, ao invés de um trecho compactado para caber na tela.

A saída do top(1) é similar. Uma sessão modelo teria a seguinte aparência:

% top
last pid: 72257;  load averages:  0.13,  0.09,  0.03    up 0+13:38:33 22:39:10
47 processes:  1 running, 46 sleeping
CPU states: 12.6% user,  0.0% nice,  7.8% system,  0.0% interrupt, 79.7% idle
Mem: 36M Active, 5256K Inact, 13M Wired, 6312K Cache, 15M Buf, 408K Free
Swap: 256M Total, 38M Used, 217M Free, 15% Inuse

  PID USERNAME PRI NICE SIZE    RES STATE    TIME   WCPU    CPU COMMAND
72257 nik       28   0 1960K 1044K RUN      0:00 14.86%  1.42% top
 7078 nik   2   0 15280K 10960K select   2:54 0.88%  0.88% xemacs-21.1.14
  281 nik   2   0 18636K 7112K select   5:36 0.73%  0.73% XF86_SVGA
  296 nik   2   0 3240K 1644K select   0:12 0.05%  0.05% xterm
48630 nik   2   0 29816K 9148K select   3:18 0.00%  0.00% navigator-linu
  175 root       2   0   924K   252K select   1:41 0.00%  0.00% syslogd
 7059 nik   2   0 7260K 4644K poll     1:38 0.00%  0.00% mutt
...

A saída está dividida em duas seções. O cabeçalho (as primeiras cinco linhas) apresenta o PID do último processo executado, a média de carga do sistema (que mede o quanto o sistema está ocupado), e o tempo de atividade initerrupta do sistema (tempo desde a última inicialização - o uptime). As outras informações do cabeçalho inidicam quantos processos (47 neste caso) estão ativos, quando de memória e swap foi utilizado, e quanto tempo o sistema está gastando em estados diferentes de uso da CPU.

Abaixo está uma série de colunas com informações similares à saída do ps(1). Como antes, você pode ver o PID, o usuário, o tempo de CPU utilizado, e o comando executado. top(1) também mostra por padrão a quantidade de memória utilizada pelo processo. Essa informação é dividida em dois grupos, uma para o tamanho total de memória, e um para o tamanho residente -- tamanho total indica quanta memória a aplicação já precisou, e o tamanho residente é a quantidade em uso no momento. Nesse exemplo você pode ver que o Netscape® precisou quase de 30 MB de RAM, mas no momento está usando apenas 9 MB.

top(1) atualiza automaticamente as informações a cada dois segundos, o que pode ser modificado com a opção s.

Este, e outros documentos, podem ser obtidos em ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Para perguntas sobre FreeBSD, leia a documentação antes de contatar <questions@FreeBSD.org>.
Para perguntas sobre esta documentação, envie e-mail para <doc@FreeBSD.org>.