# Manual do KPM - Gestão de Processos

Mario
Weilguni

    mweilguni@kde.org

Versão 1.3k1, 09-03-2000

Este manual descreve o kpm 1.3k1, um utilitário para informações e administração de processos.

O Manual do kpm

KDE
KPm
gestor de processos
top

## Informações Gerais

### O que é o kpm?

O kpm permite-te visualizar e controlar os processos de um computador a correr Linux. Ele mostra informações detalhadas dos processos a correr, recursos do computador como RAM, espaço do swap, utilização do CPU e por aí adiante. Podes matar processos e modificar as suas propriedades. Se estiveres a correr como super-utilizador, poderás modificar também o escalonamento dos processos.

### Aspectos Legais

O kpm é na sua maioria baseado no `qps` de Mattias Engdegård . A grande diferença entre o kpm e o qps é a interface de KDE. O kpm adere à maioria das convenções do KDE, usa o ficheiro de configuração KDE e tem gestão de sessão. Algumas características do qps foram removidas (ex. a possibilidade de mostrar o estilo das tabelas ou caixas de verificação em Mac OS7).

O qps (e, agora, o kpm) é publicado de acordo com a GNU Public License (GNU GPL).

### Requisitos do kpm

- Um sistema operativo Linux 2.0 ou superior. O kpm faz um uso intensivo do sistema de ficheiros `/proc` de Linux. Infelizmente ele não é portável para outros sistemas, porque todos os sistemas UNIX parecem ter a sua própria maneira de manejar as informações dos processos.

- K Desktop Environment Beta2 ou superior

- Qt 1.31. Como o KDE é baseado em Qt, isto não é problema.

- O núcleo do teu Linux tem de ser compilado com suporte para o sistema de ficheiros `proc`. Como muitas coisas, como o top, não iriam funcionar sem o suporte, isto não é problema para a maioria dos núcleos normais.

## O Menu

### O Menu da Janela

Iconificar

  Iconifica a janela. Quando iconificada, o kpm usa menos CPU porque não há necessidade de actualizar a lista de processos. Se usas o KWM como gestor de janelas e a opção "Atracar no painel" estiver seleccionada, verás um pequeno icone no painel a mostrar a carga do sistema. Nos outros gestores de janelas, como fvwm, o próprio icone do kpm mostra a carga (mas isto depende de como o gestor de janelas está configurado).

Sair

  Fecha o kpm (se a janela principal for fechada, o efeito é o mesmo).

### Processos do Menu

Renice

  Permite modificar a prioridade do processo marcado (ou todos os processos marcados). Em Linux a prioridade de um processo (valor de nice) está entre -20 (melhor) a +20 (pior), portanto aumentar o valor de nice dá a um processo menos tempo de CPU. Não tens permissão para baixar o valor de nice (aumentar a sua prioridade), a não ser que sejas o super-utilizador. Isto significa que, como utilizador normal, não podes baixar o valor de nice de um processo mesmo que antes o tenhas aumentado.

  Claro que podes mudar a prioridade de todos os teus processos. Ao super-utilizador é permitido modificar a prioridade de qualquer processo, e ele pode baixar a prioridade.

Modificar o Escalonamento

  Esta opção só está disponível para root. O "Modificar Escalonamento" permite ao super-utilizador modificar a política de escalonamento do processo seleccionado (usando as extensões Posix.1b, tempo-real, apresentadas nos núcleos 2.0.x de Linux). Processos normais estão configurados para SCHED&lowbar;OTHER e têm uma prioridade estática 0; processo tempo-real (soft) têm a política SCHED&lowbar;FIFO ou SCHED&lowbar;RR e uma prioridade estática entre o valor de 1 a 99.

Informação de Sockets

  Mostra uma lista de sockets TCP e UDP usados pelos processos seleccionados.

### Menu Sinal

O menu sinal permite mandar sinais para todos os processos marcados. Sê cuidadoso quando fizeres isto, especialmente com mais do que um processo marcado. Os sinais por omissão de Linux estão descritos aqui.

### Menu Ver

Refrescar lista de processos

  Actualiza imediatamente os processos da lista. É muito útil se quiseres utilizar períodos de actualização longos. Podes também fazer isto carregando no botão de actualizar na barra de ferramentas ou carregando na tecla Espaço.

Todos os processos

  Mostra todos os processos.

Os teus processos

  Mostra os teus processos, incluindo aqueles a correr como um utilizador diferente (ex.: programas SETUID root que tenhas iniciado)

Processos não root

  Mostra todos os processos excepto os que foram iniciados pelo root.

Processos a correr

  Mostra apenas os processos que estão a correr (a correr ou na fila de execução)

Campos do Utilizador

  A lista de processos mostrará os campos de processos mais importantes. Estes são os campos tipicamente mostrados pelo "top".

Campos Job

  Mostra os campos mais relevantes para o controlo de jobs.

Campos de Memória

  Mostra informação acerca da memória usada, falhas de página...

## A Janela Principal do kpm

### Explicando os campos

PID - ID dos Processos

  Cada processo tem um único número de ID, começando por 1 e subindo. Quando um novo processo é criado, o próximo PID não usado é alocado. Os PIDs são (actualmente) inteiros de 16-bit com sinal, portanto eles terminam e dão a volta no 32767; este é o comportamento normal e nada há a recear.

PPID - ID do Processo Pai

  Todos os processos têm um processo pai. A excepção é o processo 1 (init), que é a raiz de toda a hierarquia de processos; não tem nenhum pai.

PGID - ID do Grupo de Processos

  Cada processo é um membro de um grupo de processos. Os grupos de processos são usados para distribuição dos sinais, e por terminais para arbitrar acessos à entrada: os processos que têm o mesmo grupo do terminal são principais e podem ler a entrada, enquanto os outros irão bloquear com um sinal se tentarem ler.

SID - ID da Sessão

  Os IDs das sessões são usados normalmente para determinar o que acontece quando se dá "hangup".

TTY - Controlando o tty

  O terminal de controlo (tty) é geralmente o dispositivo (porto série, pty, etc.) de onde o processo foi começado, e que utiliza para entradas e saídas. Nem todos os processos têm um terminal de controlo. O KPM vasculha o directório /dev com o objectivo de determinar o nome do terminal, mas isto pode falhar. Por uma questão de espaço, só os dois últimos caracteres do nome tty são mostrados (portanto /dev/ttyp6 é mostrado como p6)

TPGID - ID do Grupo de Processos do dono do tty

  Um tty a correr tem por dono um processo. O TPGID é o PGID desse processo.

UTILIZADOR - Dono do Processo

  Este é o nome (real) do utilizador que é dono do processo. Se o ID efectivo de um processo for diferente do ID real, isso será indicado por: "*" ou "+". O asterisco é usado quando o utilizador efectivo é o super-utilizador (geralmente indica um executável que é set-uid para o root).

NICE - Prioridade do Tempo-Partilhado

  O valor nice determina a frequência com que um processo pode aceder ao CPU, e a fatia de tempo de acesso. O valor situa-se entre -20 a 20; 0 é o valor nice por omissão. Números menores dão mais tempo de CPU ao processo. Apenas o super-utilizador pode baixar o valor de nice.

PRI - Tamanho da Próxima Fatia de Tempo

  Isto é o tamanho máximo da próxima fatia de tempo a atribuir ao processo (ou o que sobrar da fatia de tempo actual, se o processo estiver a correr). O número situa-se no intervalo de -20 a 20, números mais pequenos indicam uma fatia de tempo maior.

PLCY - Política de Escalonamento

  FIFO (F) e Round-Robin (R) são políticas de escalonamente em tempo-real; OTHER (O) é a política normal de tempo partilhado em Unix. Os processos F e R têm uma prioridade de tempo-real entre 1 e 99. Um processo correrá desde que não haja processos em condições de execução com maior prioridade. Os processos Round-Robin correrão durante uma fatia de tempo, depois de terem sido colocados em último na fila de prioridade correspondente. Os processos FIFO executam até acederem o CPU (por adormecerem ou bloquearem) ou serem interrompidos por um processo de prioridade superior. Apenas o super-utilizador (root) pode modificar a política de escalonamento.

RPRI - Prioridade de Tempo-Real

  Os processos de tempo-real (FIFO e Round-Robin) têm prioridades entre 1 e 99. Um processo interrompe outro qualquer que tenha menor prioridade. Processos normais de tempo partilhado (política O) têm a prioridade 0. Apenas o super-utilizador (root) pode modificar a prioridade de tempo-real.

MAJFLT - Número de Falhas Importantes Ocorridas

  Uma falha de página ocorre quando um processo tenta ler ou escrever de/para uma página de memória que não está presente na RAM. Uma falha importante de página ocorre quando está envolvido acesso ao disco, tal como swapping de páginas de memória.

MINFLT - Número de Falhas Pequenas Ocorridas

  Uma falha de página ocorre quando um processo tenta ler ou escrever de/para uma página de memória que não está presente na RAM, ou escreve para uma página que está protegida contra escrita. Uma falha pequena dá-se quando não há está envolvido acesso ao disco, por exemplo quando se tenta escrever para uma página partilhada "copy-on-write".

TRS - Tamanho do Texto Residente (Kbytes)

  Isto é o tamanho do texto (isto é, código executável) do processo que está actualmente presente na RAM.

DRS - Temanho dos Dados Residentes (Kbytes)

  Isto é o tamanho da zona de dados (código não executável) do processo que está actualmente presente na RAM.

TAMANHO - Tamanho da Imagem Virtual do Processo (Kbytes)

  Isto é o tamanho total da imagem do processo. Inclui todo o código, dados, e bibliotecas partilhadas usadas pelo processo, incluindo páginas que foram "swapped".

SWAP - Kbytes do Dispositivo de swap

  Isto é simplesmente a diferença entre TAMANHO e RSS; por outras palavras é o tamanho do processo residente no disco.

RSS - Tamanho do Conjunto Residente (Kbytes)

  Isto é o tamanho da parte do processo (código e dados) que reside actualmente na RAM, incluindo bibliotecas partilhadas. Indica aproximadamente quanta RAM está a ser usado pelo processo.

SHARE - Memória Partilhada (Kbytes)

  Isto é a quantidade de memória que um processo partilha com outros. Não significa que esteja a ser usada por outros processos, apenas que tal é possível.

DT - Número de Páginas Inválidas

  Isto é o número (não o número de bytes!) de páginas em RAM que foram modificadas desde a última vez que foram escritas para o disco. As páginas inválidas têm de ser escritas para o disco antes de serem libertadas e utilizadas para outras coisas.

STAT - Estado de um Processo

  Um processo está em qualquer altura num dos seguintes estados:

  - R (em execução): o processo está a correr no cpu ou está preparado para correr.

  - S (adormecido): o processo está a aguardar a ocorrência de um evento (tal como I/O ou um temporizador).

  - D (sono não interrompivel): o processo está a aguardar a ocorrência de um evento, e não pode ser interrompido (geralmente de um dispositivo de driver).

  - T (parado): o processo está parado, ou está a ser seguido por outro processo.

  - Z (zombie): o processo terminou, mas o seu pai ainda não foi buscar a informação final.

  - Se o processo estiver completamente "swapped" (não tiver páginas residentes), um 'W' é mostrado neste campo. (Isto também é válido para processos do núcleo, tal como kswapd.)

FLAGS - Flags de Processos (hex)

  Isto dá informação adicional sobre o estado dos processos. Ver o código fonte do núcleo de Linux para mais detalhes.

WCHAN - Função Onde o Processo está a Dormir

  Se o processo estiver à espera de alguma coisa, esta é a função do núcleo em que ele está parado. (Prefixos do&lowbar; ou sys&lowbar; são retirados do nome para torná-lo mais pequeno.)

UID - ID Númerica do Utilizador

  Isto é a ID (real) do utilizador dono do processo.

&percnt;WCPU - Percentagem Pesado do CPU

  Isto é percentagem de tempo de CPU que o processo está a utilizar, em média nos últimos 30 segundos (média decaindo exponencialmente).

&percnt;CPU - Percentagem de Tempo de CPU desde a Última Actualização

  Isto é a quantidade de tempo de CPU utilizada pelo processo desde a última actalização da tabela de processos do kpm.

&percnt;MEM - Percentagem de Memória Usada

  Isto é a percentagem da memória total RAM utilizada pelo processo (como tamanho residente). Inclui as bibliotecas partilhadas, pelo que é exagerado.

START - Altura em que o Processo Começou

  Isto é a altura de quando o processo foi iniciado.

TIME - Tempo Total de CPU Usado

  Isto é quanto tempo de CPU o processo usou desde de que foi iniciado.

COMM - Comando que Iniciou o Processo

  Isto é o nome do comando (nome do ficheiro) que começou o processo. Nomes compridos são cortados.

CMDLINE - Linha de Comando com que o Processo foi Começado

  Isto é a linha de comando, incluindo argumentos, que iniciou o processo. Se no menu Opções estiver seleccionado "Esconder Caminho de Comando", então o caminho da linha de comando não é mostrado. Os processos "swapped" devem apenas mostrar o nome de comando entre parenteses (isto também é válido para os processos do núcleo).

## Apêndice

### Sinais UNIX

Este são os sinais como explicados no manual de signal(7). Para mais detalhes consulta a página do manual com:

`man 7 signal`

Os seguintes sinais são definidos pela norma Posix e podem ser enviados a partir do kpm:

- SIGHUP: Condição desligado detectada no terminal de controlo ou morte do processo de controlo

- SIGINT: Interrupção a partir do teclado

- SIGQUIT: Sinal de saída do teclado

- SIGILL: Instrução Inválida

- SIGABRT: Sinal de Terminação de abort(3)

- SIGFPE: Excepção de vírgula flutuante

- SIGKILL: Sinal de Matar

- SIGSEG: Referência de memória inválida

- SIGPIPE: Canal interrompido: escrita para um canal sem leitores

- SIGALRM: Temporizador de alarm(1)

- SIGTERM: Sinal de terminação

- SIGUSR1: Sinal de utilizador 1

- SIGUSR2: Sinal de utilizador 2

- SIGCHLD: Filho parado ou terminado

- SIGCONT: Continuar, no caso de estar parado

- SIGSTOP: Parar Processo

- SIGTSTP: Sinal de Parar do tty

- SIGTTIN: Entrada no tty para processos em "background"

- SIGTTOU: Saída no tty de processos em "background"

Estes sinais não são definidos pela norma Posix, nem disponíveis no kpm (até agora)

- SIGTRAP: Trace/breakpoint trap

- SIGIOT: IOT trap. Sinónimo para SIGABRT

- SIGBUS: Erro de Barramento

- SIGSYS: Mau argumento para rotina (SVID)

- SIGSTKFLT: Falha da pilha no coprocessador

- SIGURG: Condição urgente no socket (4.2 BSD)

- SIGIO: I/O possível agora (4.2 BSD)

- SIGPOLL: Sinónimo para SIGIO (System V)

- SIGCLD: Sinónimo para SIGCHLD

- SIGXCPU: Tempo limite do CPU excedido (4.2 BSD)

- SIGXFSZ: Tamanho limite do ficheiro excedido (4.2 BSD)

- SIGVTALRM: Despertador virtual (4.2 BSD)

- SIGPROF: Despertador de perfil

- SIGPWR: Falha de energia (System V)

- SIGINFO: Sinónimo para SIGPWR

- SIGLOST: Lock de ficheiro perdido

- SIGWINCH: Alteração do tamanho da janela (4.3 BSD, Sun)

- SIGUNUSED: Sinal não usado

### "Bugs" e Problemas Conhecidos

- O kpm morre algumas vezes com um erro de segmentação se estiverem marcados mais que um processo e a lista for actualizada. Não sei porquê...

- A barra de informação e a lista de processos estão optimizados para um fonte de 12pt. Fica bem com fontes até 14pt, mas fica horroroso para fontes maiores.

- O kpm pode consumir muitos recursos do CPU se o período de actualização for pequeno. No meu sistema (AMD K6PR200) ele usa aproximadamente 5 porcento do tempo do CPU com uma actualização de um segundo. Isto também depende do número total de processos (todos os processos, não apenas os mostrados) e pode ser muito superior a isto.

- O número de &percnt;CPU não é exacto para períodos de tempo curtos devido à granularidade do temporizador.

- O campo WCHAN não é correcto se o processo dormir em local fora dos indicados em `System.map` (por exemplo, num módulo do núcleo). Nestes casos, a última entrada do `System.map` será mostrada (qualquer coisa como `&lowbar;end`).

- O kpm não aguenta com mais que um processo com o mesmo PID. Isto pode ocorrer quando se usa CLONE&lowbar;PID com a chamada de sistema clone().

Tradução da documentação por Ricardo Cruz rick2@ricjoa.fe.up.pt