CI066 - Oficina de Programação
Laboratório 08

Prof. Armando Luiz N. Delgado

Laboratório 08

Controle de Processos em UNIX

  1. A partir de uma sessão shell, execute o comando tty(1) para determinar o nome de identificação do terminal associado à sessão. Anote esta identificação.
  2. Verifique com ps(1) quais são TODOS os seus processos em execução no momento.
  3. A partir da sessão shell iniciada no item 1, inicie em background 2 (dois) processos emacs(1) e 3 (três) processos xterm(1). Faça isto em uma única linha de comando.

    ATENÇÃO: Ao executar emacs(1), use como argumento um nome de arquivo qualquer. Ao executar xterm(1), use a opção -title para definir um título diferenciado para cada janela associada. Uma vez em execução, minimize/iconifique cada janela emacs.

  4. Em cada xterm iniciado no item anterior, use tty(1) para determinar a identificação de cada terminal. Anote estas identificações.
  5. Na sessão shell iniciada no item 1, verifique com ps(1) quais são TODOS os seus processos em execução no momento. Em seguida, execute os comandos jobs e jobs  -l. Observe a diferença entre os resultados e diga: que informações adicionais a opção -l do comando jobs fornece?
  6. Em uma das sessões shell, execute a linha de comando abaixo:
                 xterm ; cat ; emacs &
    
    Explique:
    1. Porque o comando emacs não é executado em background logo que você finaliza a linha de comando com um \enter?
    2. Em que momento emacs será executado?
    3. Como terminar a execução do comando xterm PERMANECENDO na sessão onde você executou a linha de comando?
    4. Terminado o processo xterm, cat(1) é executado. SUSPENDA o processo associado a cat e execute jobs  -l. Explique o que significam as informações exibidas.
  7. Em cada uma das sessões shell, execute um processo emacs em background e outro em foreground. Use apenas 1 (uma) linha de comando.
  8. A partir da situação estabelecida no item anterior, faça com que todos os processos emacs que estão em foreground passem para background.
  9. Neste ponto, TODOS os processos associados a emacs(1) devem estar em background. Faça com que em cada sessão shell volte a existir um processo emacs em foreground.
  10. A partir de uma sessão shell, TERMINE TODOS os processos (exceto bash) iniciados em alguma OUTRA das sessões shell ativas no momento.

    DICA: Use ps(1) e a informação de tty(1) colhida nos ítens iniciais para identificar a janela xterm de interesse e seus respectivos processos.

  11. Termine todos os seus processos que estejam associados ao comando emacs, usando kill(1).
  12. Termine todos os seus processos que estejam associados ao comando xterm, EXCETO aquele associado à primeira sessão shell iniciada no item 1. Use kill(1).
  13. Como verificar quais processos estão ocupando mais que 50% de CPU, incrementando suas prioridades em 10?

    DICA: Ver ps(1) e renice(1).

  14. Defina um alias que ao ser executado, termine todos os processos associados com o navegador WEB que você usa e em seguida execute logout do sistema.
  15. Ao produzir um trabalho para as disciplinas do DINF nos computadores do LabINF, você colocou um processo em execução e por algum motivo ignóbil, escabroso, enigmático e psicomático, sua sessão shell, bem como sua interação com o ambiente de janelas simplesmente travaram. Qual deve ser seu procedimento para fazer seu terminal voltar ao normal ANTES DA SOLUÇÃO DERRADEIRA DE REINICIAR O COMPUTADOR? Lembre que você tem vários terminais ao seu lado no LabINF.

    DICAS: Pense primeiro em quais processos você deve investigar e qual a ordem em que você deve terminá-los.

    NOTA: O comando su(1) pode ser usado para, a partir de uma sessão shell iniciada por um outro usuário, permitir que você inicie ums sessão shell com seu login. Como alternativa sempre existe o comando ssh(1) com a opção -l.

Conclusões



Armando Luiz Nicolini Delgado
2008-10-03