Segue o resumo de comandos e conceitos vistos em Sala de Aula.
Este é um material de apoio aos meus alunos que tem todo embasamento durante as
aulas presenciais.
Você pode fazer o exercício desta aula no seguinte link:
http://dailson.blogspot.com.br/2012/10/exercicio-da-aula-9-gerenciamento-de.html
As respostas deste exercício estão no seguinte link:http://www.dailson.blogspot.com.br/2012/10/exercicio-da-aula-9-gerenciamento-de.html
Você pode encontrar todos os resumos de aula no link abaixo:
http://www.dailson.com.br/2009/05/indice-mini-tutoriais-usados-em-aula.html 
Comunicação entre processos:
O Linux possui diversas formas de realizar comunicação entre processos, também
conhecido com IPC. Estas formas de comunicação se referem a processos em
execução na mesma máquina, o que não inclui sockets ou RPC (são para comunicação entre máquinas
distintas).
Dentre as técnicas de comunicação entre processos fornecidas pelo Linux, convém
citar:
a) por memória compartilhada: através de diretivas shm* pode-se disponibilizar
uma área de memória comum à vários processos. Simples: quando um processo quer
enviar dados ao outro, põe na memória.
b) pipes: um método muito interessante onde se cria um canal bidirecional na
tabela de descritores, como se fosse arquivo, mas não é (e não tem I/O). Quando
você faz um ls -la | sort está usando pipe!
c) sinais: quando um processo quer sinalizar algo a outro processo. Ao
contrário das demais nesta não se envia dados mas apenas um valor numérico.
Existem outras formas de comunicação como semáforos, fila de mensagens e até
mesmo morte de filho, que é considerada uma comunicação. Se você digitar ipcs
na linha de comando irá ver os canais de comunicação atualmente em uso (não
sinais).
Texto retirado do Artigo: 
http://www.vivaolinux.com.br/artigo/Sinais-em-Linux/?pagina=1
Comandos:
Listar os processos do terminal
#
ps
Listar os processos de todos os
terminais
#
ps -a
# ps a (exibe os processos mais detalhes)
LIstar os processos dos usuários
#
ps -u
# ps -au
Lista todos os processos do Sistema 
#
ps -A
# ps -ef
# ps -eF
# ps -ely
# ps ax
# ps aux (exibe uma coluna com o nome do usuário que iniciou o  processo)
Exibe todos os processos em forma de
árvore
#
pstree
# ps -ejH
# ps axfj
Obs: teste os vários parâmetros do comando pstree:
-a
    Mostra opções passadas na linha de comando.
-c
    Mostra toda a estrutura (inclusive sub-processos do processo
pai).
-G
    Usa caracteres gráficos no desenho da árvore de processos.
-h
    Destaca o processo atual e seus antecessores.
-H [pid]
    Destaca o processo especificado.
-l
    Não faz quebra de linha
-n
    Classifica pelo número PID ao invés do nome.
-p
    Mostra o número PID entre parênteses após o nome do
processo.
-u
    Mostra também o dono do processo.
-U
    Usa o conjunto de caracteres Unicode para o desenho da
árvore.
Exibe informações sobre Threads
#
ps -eLf
# ps axms
Exibe informações de segurança dos
processos
#
ps -eo euser,ruser,suser,fuser,f,comm,label
# ps axZ
# ps -eM
Exibe todos os processos que estão sendo
executados com permissões de root (real e com ID)
# 
ps -U root -u root u
Especificando as colunas para
visualização:
Exemplos:
Apenas o Numero do processo e o comando que o gerou
#
ps ao PID,COMMAND
Apenas o numero do processo, o comando
que gerou o pid, o uso da CPU e da memória
#
ps ao pid,%cpu,%mem,command
Outros exemplos tirados do manual do ps:
#
ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
# ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
# ps -eo pid,tt,user,fname,tmout,f,wchan
Exibir processos e prioridade do
processo (Coluna NI)
#
ps l
# ps -l
# ps -Al
# ps -el
Significado das Principais colunas do
comando TOP:
    USER - Nome do usuário dono do processo.
    UID - Número de identificação do usuário dono do processo.
    PID - Número de identificação do processo.
    PPID - Número de identificação do processo pai de cada
tarefa.
    PRI - Número de prioridade da tarefa. (Números altos são
prioridades baixas).
    NI - Valor preciso da prioridade da tarefa.
    %CPU - O consumo de processamento do processo.
    %MEM - O consumo de memória do processo.
    SIZE - Tamanho do código da tarefa em kilobytes.
    RSS - Soma total da memória física usada pelo processo, em
kilobytes.
    WCHAN - Endereço ou nome da função do kernel da tarefa que
está atualmente suspensa.
    STAT - Estado do processo: S - Suspenso, R - em Execução, T
- Interrompido, Z - Terminado, etc.
    TTY - Terminal onde são executados os processos.
    TIME - Tempo total da CPU usado pelo processo desde que foi
iniciado.
    COMMAND - Nome do comando do processo. 
Entendendo os Sinais:
Sinais são usados quando se deseja enviar uma mensagem para um processo,
mas esta mensagem não é um texto, mas sim um código cujo significado é pré
determinado. Antes de mais nada, para dar o melhor exemplo possível, quando se executa um kill 7000 está
se enviando para o processo 7000 o sinal de código 15 que significa algo como
"Caro processo, queria gentilmente terminar a sua execução". 
Como o sinal 15 significa terminar, o processo irá terminar a sua execução.
Como todos já devem saber, se o "gentil" processo recusar-se a
terminar, posso forçar com um kill -9 7000, onde envio para ele o sinal 9 que significa algo como: "Morra!"
(uma vez disse em um curso que com sinal 15 eu dou a arma para o processo
esperando que ele aperte o gatilho, depois de escrever o seu testamento, fechar suas finanças etc. Com o
-9 é um tiro na testa sem aviso). 
Principais Sinais:
Sinal 1: Significa reinício do programa. Este sinal é chamado de SIGHUP.
Sinal 2: Sinal chamado de SIGINT. Causa uma interrupção no programa. Falando em
termos práticos, é um sinal 2 que o programa recebe quando se pressiona
Control+C.
Sinal 15: esta é a solicitação de morte, chamada de SIGTERM. Ao receber um
sinal 15 o processo deveria preparar-se para terminar, fazendo "seus
últimos pedidos" e ele mesmo encerrando normalmente sua execução. 
Sinal 9: SIGKILL. Este é a morte indefensável. Não pode ser mascarado, ou seja,
o programador não consegue substituir a rotina de tratamento do Sistema
Operacional que simplesmente tira o processo da fila de prontos. Deve ser usado em último caso,
pois um sinal 15 é mais elegante por dar a chance ao processo de se preparar
para sua morte.
Sinal 20: SIGTSTOP. Este sinal de STOP faz com que o processo interrompa a sua
execução. Veja, ele não termina, apenas interrompe. 
Sinal 18: SIGCONT. Este sinal de CONTINUAR, faz com que o processo que foi
interrompido pelo Sinal 20, continue seu processamento.
Fonte: 
http://www.vivaolinux.com.br/artigo/Sinais-em-Linux/?pagina=2 
Enviando Sinais para os Processos:
Vamos utilizar dois comandos. O KILL e o KILLALL.
A diferença entre estes dois comandos é que o KILL envia sinais para os números
dos processos e o KILLALL envia para nomes.
Exemplo:
Abro o vim em um terminal. E suponho que ele está travado. Quero enviar um
sinal para este processo. Com o comando KILL precisariamos de dois passos:
1º Vou para outro terminal e executo o comando ps a
2º Anoto o PID do VIM
3º kill -15 o número do PID do vim.
   Exemplo: kill -15 4567
Usando o KILLALL, iríamos para outro terminal e fariamos apenas:
#
killall -15 vim
Obs: Porém se tiver mais programas vim abertos, todos receberão o
mesmo sinal.
Para os exemplos abaixo, vamos supor que estamos enviando sinais para o
processo 4567 - backup.sh
Reiniciando o processo
#
kill -SIGHUP 4567
# kill -1 4567
Interrompendo o programa
#
kill -SIGINT 4567
# kill -2 4567
Encerrando um programa (educadamente)
#
kill -SIGTERM 4567
# kill -15 4567
Matando um processo (LUNGA MODE=ON)
#
 kill -SIGKILL 4567
# kill -9 4567
Parando (congelando) um processo na
memória
#
kill -SIGSTOP 4567
# kill -20 4567
Retomando o processo (congelado no
tópico anterior)
#
kill -SIGCONT 4567
# kill -18 4567 
Primeiro Plano (FOREGROUND) e Segundo Plano (BACKGROUND)
Você sabia que no mesmo terminal posso iniciar vários processos e deixá-lo em background. Ainda
tenho a opção de deixá-lo parado ou executando.
Para termos um bom exemplo de programas executando em segundo plano, vamos
criar um pequeno script que terá a função apenas de contar de 1 até infinito.
Passos para escrever o script:
vim
conta.sh
#!/bin/bash
while :  ;
do
   let i++
done
Pressione a tecla ESC e digite :x
Tornando o script executável
#
chmod +x conta.sh
Executando o script:
#
./conta.sh
Parece que ele não está fazendo nada, mas ele está contando de 1 até infinito.
Para cancelar o programa, basta digitar CTRL+C
OBs: CTRL+C é o mesmo que kill -SIGINT ou kill -2
Iniciando um processo.
Vamos colocar em
segundo plano os programas vim /etc/services, nano, man ls, cat
/etc/services | more, 
#
vim /etc/services
Pressione CTRL+Z
O processo vai para segundo plano.
#
man ls
Pressione CTRL+Z
O processo vai para segundo plano.
#
cat /etc/services | less
Pressione CTRL+Z
O processo vai para segundo plano.
#
cat /etc/services | more
Pressione CTRL+Z
O processo vai para segundo plano.
E por ultimo vamos chamar o nosso programa, o conta.sh
#
./conta.sh
Exibindo os processos que estão em segundo plano (background):
#
jobs
Se você seguiu meus exemplos acima, você terá esta lista:
[1]  
Stopped                
vim /etc/services
[2]  
Stopped                
man ls
[3]  
Stopped                
cat /etc/services | less
[4]- 
Stopped                
cat /etc/services | more
[5]+ 
Stopped                
./conta.sh
Ativando programas que estão em Segundo Plano
Na listagem acima, o processo conta.sh é um programa que está
com o status Stopped. Mas sabemos que este programa tem a função de contar.
Para ativar este programa você tem duas 
maneiras possíveis:
A primeira é mandar o sinal SIGCONT para ele. A outra, bem mais fácil é fazer o
seguite:
#
bg 5
Ao executar o comando jobs, veja como ficou nossa lista:
[1]  
Stopped                
vim /etc/services
[2]   Stopped                
man ls
[3]  
Stopped                
cat /etc/services | less
[4]- 
Stopped                
cat /etc/services | more
[5]+ 
Running                
./conta.sh &
Note que agora o conta.sh status Running (executando) e apareceu um novo
símbolo ao lado do nome do programa: &
O Símbolo & avisa que o programa está sendo executado em segundo plano.
Se você desejar parar novamente o conta.sh, basta digitar:
#
killall -SIGSTOP conta.sh
Mais uma vez, vamos ver como ficou através do comando jobs
[1]  
Stopped                
vim /etc/services
[2]  
Stopped                
man ls
[3]  
Stopped                
cat /etc/services | less
[4]- 
Stopped                
cat /etc/services | more
[5]+ 
Running                
./conta.sh &
Outra maneira de ativá-lo novamnete é enviando um sinal através do comando KILL
#
killall -SIGCONT conta.sh
Trazendo para primeiro plano (foreground) programas que estão em segundo plano
(background).
De posse da lista de processos que estão em segundo plano, basta você digitar o
comando fg e número do programa nesta lista e você terá o programa de volta em
primeiro plano.
Observe a lista do comando jobs:
[1]  
Stopped                
vim /etc/services
[2]  
Stopped                
man ls
[3]  
Stopped                
cat /etc/services | less
[4]- 
Stopped                
cat /etc/services | more
[5]+ 
Running                
./conta.sh &
#
fg 1 (trará o vim /etc/services para primeiro plano)
Para voltar para background digite mais uma vez CTRL+Z.
Emita o comando jobs mais uma vez:
#
jobs
Veja o resultado da lista:
[1]+ 
Stopped                
vim /etc/services
[2]  
Stopped                
man ls
[3]  
Stopped                
cat /etc/services | less
[4]  
Stopped                
cat /etc/services | more
[5]-  Stopped                
./conta.sh
Notou que agora o sinal de + saiu da posição 5 e foi para a posição 1? E o
sinal de menos da posição 4 para a posição 5?
Estes sinais demonstram os dois últimos programas que foram colocados em backgroud. Caso
você digite fg sem parametros, o programa que virá para primeiro plano é o que
tem o 
sinal + e o próximo da fila que era o - torna-se + e assim por diante.
Colocando programas em segundo plano diretamente na linha de comando.
# ./conta.sh &
O Uso do & já coloca o programa em segundo plano em execução.
Repita este comando várias vezes, e veja um resultado semelhante a este:
[1]+ 
Stopped                
vim /etc/services
[2]  
Stopped                
man ls
[3]  
Stopped                
cat /etc/services | less
[4]   Stopped                
cat /etc/services | more
[5]- 
Stopped                
./conta.sh
[6]  
Running                
./conta.sh &
[7]  
Running                
./conta.sh &
[8]  
Running                
./conta.sh &
[9]  
Running                
./conta.sh &
[10]  
Running                
./conta.sh &
[11]  
Running                
./conta.sh &
Obs: Toda vez que você chama um programa já em segundo plano, o Shell exibe na
linha abaixo o número do processo no qual ele está submetido.
[dailson@server tmp]$ ./conta.sh &
[11]
12642
Outra observação importante é que quando executamos um programa em segundo
plano e ele acaba sua execução o Shell avisa emitindo uma mensagem na própria
linha de comando.
Teste você mesmo. Execute o comando que atualiza o banco de dados do comando
locate.
#
updatedb &
[12] 12649
Fique pressionando enter algumas vezes. Em determinado momento o Shell emite a
seguinte mensagem:
Done
[12] 12649
Informando que o processo já foi concluido.
Prioridade de Processos no Linux
Os processos no Linux (no espaço do usuário) vão de -20 a +19.
A prioridade padrão de qualquer processo iniciado pelo usuário é 0.
Numeros negativos, indicam maior prioridade e numeros positivos, prioridades
baixas.
Para visualizar a prioridade dos processos do sistema, utilize o seguinte
comando:
#
ps al
O Resultado é parecido com este:
F  
UID   PID  PPID PRI  NI   VSZ  RSS
WCHAN  STAT TTY        TIME COMMAND
4     0  3988     1 
17   0  3016  400 ?      Ss+ 
tty1       0:00 /sbin/mingetty tty1
4     0  3989     1  16  
0  2708  400 ?      Ss+ 
tty2       0:00 /sbin/mingetty tty2
4     0  3990     1 
17   0  2156  400 ?      Ss+ 
tty3       0:00 /sbin/mingetty tty3
4     0  3991     1 
17   0  2204  400 ?      Ss+ 
tty4       0:00 /sbin/mingetty tty4
4     0  3992     1 
17   0  2044  400 ?      Ss+ 
tty5       0:00 /sbin/mingetty tty5
4     0  3993     1 
16   0  2884  400 ?      Ss+ 
tty6       0:00 /sbin/mingetty tty6
0   525 16849 21405  17   0  3724  636
-      R+  
pts/0      0:00 ps al
0   525 21405 21404  15   0  6168 1472
wait   Ss   pts/0      0:00 -bash
Ou se preferir, você pode filtrar com o comando que aprendemos na aula de ps:
#
ps ao pid,ni,command (assim só aparece o pid, a coluna NICE e o
comando que gerou).
Observe a coluna: NI. Ela tem os valores que falamos.
Note que todo processo iniciado pelo usuário tem prioridade 0.
Vamos ver agora a listagem completo com os processos do sitema.
#
ps -axl | more
F  
UID   PID  PPID PRI  NI   VSZ  RSS
WCHAN  STAT TTY        TIME COMMAND
4     0     1    
0  16   0  2512  548 ?      S   
?          0:00 init [3]
1     0     2     1
-100  -     0    0 migrat
S    ?         
0:03 [migration/0]
1     0     3    
1  34  19     0    0 ksofti
SN   ?          0:00
[ksoftirqd/0]
1     0     4     1
-100  -     0    0 migrat
S    ?          0:02
[migration/1]
1     0     5    
1  34  19     0    0 ksofti
SN   ?          0:00
[ksoftirqd/1]
1     0     6     1
-100  -     0    0 migrat
S    ?         
0:02 [migration/2]
1     0     7    
1  34  19     0    0 ksofti
SN   ?          0:00
[ksoftirqd/2]
1     0     8     1
-100  -     0    0 migrat
S    ?          0:02
[migration/3]
1     0     9    
1  34  19     0    0 ksofti
SN   ?          0:00
[ksoftirqd/3]
1     0    10    
1   5 -10     0    0 worker
S<   ?          0:00
[events/0]
1     0    11    
1   5 -10     0    0 worker
S<   ?          0:00
[events/1]
1     0    12    
1   5 -10     0    0 worker
S<   ?          0:00
[events/2]
1     0    13    
1   5 -10     0    0 worker
S<   ?          0:00
[events/3]
1     0    14    
1   6 -10     0    0 worker
S<   ?          0:00
[khelper]
1     0    15    
1   5 -10     0    0 worker
S<   ?          0:00
[kthread]
1     0    16    15  15
-10     0    0 worker S<  
?          0:00 [kacpid]
1     0    94   
15   5 -10     0    0 worker
S<   ?          0:00
[kblockd/0]
1     0    95   
15   5 -10     0    0 worker
S<   ?          0:00
[kblockd/1]
1     0    96   
15   5 -10     0    0 worker
S<   ?          0:00
[kblockd/2]
1     0    97   
15   5 -10     0    0 worker
S<   ?          0:00
[kblockd/3]
Note na coluna NI que existem processos com prioridades baixíssimas (19) e
outros com prioridade -10.
Iniciando processos fora da prioridade Padrão
Vamos aprender a usar o comando nice
#
nice -n prioridade processo
Exemplo: Vamos usar o nosso programa conta.sh como exemplo. Vamos iniciá-lo com
a menor prioridade possível e já em segundo plano:
#
nice -n +19 ./conta.sh & 
Veja o resultado:
#
ps -al
F S   UID   PID  PPID  C PRI  NI ADDR SZ
WCHAN  TTY          TIME CMD
0 R   525 26483 21405 99  99  19 -  1234
-      pts/0    00:00:02 conta.sh
0 R   525 26484 21405  0  76   0 -  
878 -      pts/0    00:00:00 ps
Agora vamos iniciá-lo com a prioridade -10
#
nice -n -10 ./conta.sh & 
Veja o resultado:
#
ps -al
F S   UID   PID  PPID  C PRI  NI ADDR SZ
WCHAN  TTY          TIME CMD
0 R   525 26483 21405 99  99 -10 -  1234
-      pts/0    00:00:02 conta.sh
0 R   525 26484 21405  0  76   0 -  
878 -      pts/0    00:00:00 ps
Alterando a prioridade de um processo que já está em execução.
Desta vez vamos utilizar o comando renice.
#
renice -n prioridade processo
Vamos usar o exemplo anterior. O conta.sh tem o pid 26483 e o processo tem
prioridade -10.
Vamos mudar para -5 (lembre-se que o processo já está em execução)
#
renice -5 -p 26483
Veja o resultado:
#
ps -al
F S   UID   PID  PPID  C PRI  NI ADDR SZ
WCHAN  TTY          TIME CMD
0 R   525 26483 21405 99  99  -5 -  1234
-      pts/0    00:00:02 conta.sh
0 R   525 26484 21405  0  76   0 -  
878 -      pts/0    00:00:00 ps
Vamos mudar para 0 
#
renice 0 -p 26483
Veja o resultado:
#
ps -al
F S   UID   PID  PPID  C PRI  NI ADDR SZ
WCHAN  TTY          TIME CMD
0 R   525 26483 21405 99  99   0 -  1234
-      pts/0    00:00:02 conta.sh
0 R   525 26484 21405  0  76   0 -  
878 -      pts/0    00:00:00 ps
NOHUP
O nohup é um comando que faz com que os processos ignorem o sinal hangup (sinal
1 - interrupção).
Vamos executar um processo que não poderá ser finalizado, veja o exemplo:
# nohup ./conta.sh
nohup: appending output to `nohup.out' 
Este recurso é utilizado como recurso de iniciar programas e fazer lougout. Com
isso o programa fica rodando em background mesmo que o terminal (ou janela do
ambiente gráfico) 
seja encerrado. O Resultado do comando é direcionado para o arquivo nohup.out
Veja este exemplo:
#
nohup vim
# killall -1 vi
# ps -aux | grep vi
root       988  0.6 11.0 22120 13152
?       S    08:27  
0:06 kghostview /mnt/w
root      1001 14.3  3.0  8500 3572
pts/3    RN   08:38   0:50 vi
root      1026  0.0  0.5  1724 
668 pts/4    S    08:44   0:00 grep vi
Observe que o processo não foi finalizado, então agora vamos finalizá-lo: 
Monitorando processos em Tempo Real
 
 Para monitorar
processos em tempo real poderemos utilizar duas ferramentas: o top e o htop.
O comando top já vem por padrão nas distribuições linux. 
Basta digitar:
# top
Este programa atualiza a tela a cada 5s. Se quiser uma monitoração
segundo a segundo, digite:
#
top -d 1
O Top também aceita comandos quando está em execução:
[Space]    Atualizar a tela imediatamente
[h]    Exibir uma tela de ajuda
[k]    Matar (kill) um processo. Você deverá indicar o ID do
processo e o sinal a ser enviado para ele.
[n]    Alterar o número de processos exibidos. Você deverá
indicar o número.
[u]    Ordenar por usuário.
[M]    Ordenar por uso da memória.
[P]    Ordenar por uso da CPU.
Dica:
Aplicações como o Apache, Mozilla e o Nautilus são thread-aware — são criados
threads múltiplos para lidar com usuários múltiplos ou pedidos múltiplos, e
cada thread recebe um 
ID de processo. Por default, o ps e o top exibem somente o thread principal
(inicial). Para visualizar todos os threads, use o comando ps -m ou pressione
[Shift]-[H] no top. 
Fonte: 
http://web.mit.edu/rhel-doc/3/rhel-sag-pt_br-3/ch-sysinfo.html
HTOP
Este programa não vem por padrão nas distribuições, mas é o melhor de todos!
Usa cores, gráficos e teclas de atalhos bem mais fáceis do que o engessado TOP.
Digite:
#
htop
Caso você não tenha este programa, instale na sua distribuição.
Debian e derivados:
#
apt-get install htop
Redhat, Fedora, CentOS...
#
yum install htop
 
Note que as barras já dão uma idéia melhor de poder de processamento, memória RAM e Swap.
Na parte inferior, tem as teclas de atalho (sempre teclas de função) que dão acesso rápido aos recursos:
F1 - Ajuda
F2 - Altera cores, graficos e personaliza o htop
F3 - Procura processos (ps aux | grep ...)
F4 - Inverte a ordem da ordenação escolhida no F6
F5 - Exibe os processos em forma de árvore (pstree)
F6 - Ordena a visualização do programa (Por consumo de cpu, memoria...)
F7 - Diminui a prioridade de um processo (renice -1)
F8 - Aumenta a prioridade de um processo (renice +1)
F9 - Envia sinais para os processos (kill e killall)
F10 - Sai do programa
Fontes:
http://www.guiafoca.org/cgs/guia/inic_interm/ch-run.html#s-run-controle
http://dainf.ct.utfpr.edu.br/~maziero/doku.php/unix:gestao_de_processos
http://web.mit.edu/rhel-doc/3/rhel-sag-pt_br-3/ch-sysinfo.html
http://www.vivaolinux.com.br/artigo/Criando-monitorando-e-terminando-processos?pagina=3