Administração de sistemas operacionais Aula 12 Administração de processos. Prof. Esp. Diovani Milhorim Administração de processos Programas e processos Programas são arquivos em disco contendo instruções para execução pelo processador, enquanto processos são as execuções em andamento. Cada processo executando no sistema em um determinado momento é identificado por um número único, o PID Process IDentifier. Além disso, cada processo possui outras informações que o caracterizam, como: Usuário proprietário (aquele que lançou o processo) Sessão de shell de onde foi lançado (se foi lançado através de um shell) Estado atual (Running, Suspended, SWapped, ...) Linha de comando usada para lançá-lo. Uso de memória e CPU Administração de processos Comandos ps e pstree Podemos visualizar os processos em execução no sistema através do comando ps, cuja execução sem parâmetros gera uma listagem como a seguinte: # ps PID TTY TIME CMD 22791 pts/0 00:00:00 bash 22836 pts/0 00:00:00 ps Observamos os seguinte campos nesta listagem PID: identificação do processo TTY: terminal do usuário que requisitou o processo TIME: tempo de execução total do processo CMD: Comando que iniciou o processo. Administração de processos Comandos ps e pstree O comando ps aceita uma série de parâmetros, entre os quais os mais importantes são: a : mostra processos de outros usuários também (all). u : mostra listagem mais detalhada dos processos, com uso de memória e CPU x : mostra processos não conectados a terminais. w: mostra mais detalhes sobre as linhas de comando dos processos. Administração de processos Comandos ps e pstree Para obter uma listagem completa dos processos em execução no sistema usa-se as opções auxw, que geram uma listagem como a que segue: # ps auxw USER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMAND root 975 0.0 0.0 1424 568 ? S Apr28 0:06 crond xfs 1051 0.0 0.1 5356 4076 ? S Apr28 0:00 [xfs] ntop 1072 0.0 0.5 88936 11296 ? S Apr28 0:00 [ntop] root 1092 0.0 0.0 1608 576 ? S Apr28 0:00 rhnsd --interval 240 root 1099 0.0 0.0 1344 396 tty2 S Apr28 0:00 /sbin/mingetty tty2 root 1100 0.0 0.0 1344 396 tty3 S Apr28 0:00 /sbin/mingetty tty3 root 1101 0.0 0.0 1344 396 tty4 S Apr28 0:00 /sbin/mingetty tty4 root 1102 0.0 0.0 1344 396 tty5 S Apr28 0:00 /sbin/mingetty tty5 root 1103 0.0 0.0 1344 396 tty6 S Apr28 0:00 /sbin/mingetty tty6 Administração de processos Os principais campos dessa listagem são: USER PID %CPU %MEM processo. SIZE RSS TTY STAT START TIME COMMAND : o proprietário do processo : número do processo. : porcentagem da CPU usada pelo processo. : porcentagem da memória usada pelo : memória total usada pelo processo. : memória física (RAM) usada pelo processo. : terminal ao qual o processo está ligado. : status do processo (rodando, suspenso, ...). : data de lançamento do processo. : tempo total de CPU usado pelo processo. : comando usado para lançar o processo. Administração de processos Estados de processo. À medida que vai sendo executado, um processo passa por vários estados. ready: pronto para executar. running. Em execução na CPU waiting: Aguardando operação de I/O. stopped: Suspenso por um outro processo. zombie: Processos que terminam sem que o seu pai (parent) seja informado. Dead: processo terminado Administração de processos Figura 01: Estados de processos Administração de processos Comando pstree O comando pstree é útil por mostrar a hierarquia existente entre os processos ativos no sistema: Administração de processos prioridade processos – Comandos nice e renice O comando nice configura a prioridade da execução de um comando/programa. nice [opções] [comando/programa] Administração de processos prioridade processos – Comandos nice e renice O comando renice configura a prioridade de um processo que já esteja em execução (somente o dono do processo ou o superusuário podem mudar a prioridade de um processo). renice [opções] [processos ou usuários] Se um programa for executado com maior prioridade, ele usará mais recursos do sistema para seu processamento, caso tenha uma prioridade baixa, ele permitirá que outros programas tenham preferência. A prioridade de execução de um programa/comando ou processo pode ser ajustada de -19 (a mais alta) até 19 (a mais baixa). Administração de processos prioridade processos – Comandos nice e renice Exemplos de utilização: # nice -n -19 find / -name apropos # ps –l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 000 S 1094 22791 22790 0 75 0 - 583 wait4 pts/0 00:00:00 bash 000 R 1094 23275 22791 0 76 0 - 775 pts/0 00:00:00 ps #renice 19 -p 22790 22790: prioridade antiga = 0; prioridade nova = 19 Administração de processos Execução de Comandos em Background e Foreground Caractere & É possível que se queira executar um comando demorado e, enquanto se espera o resultado do mesmo, fazer-se outras coisas no terminal. Este processo de se rodar um programa ou comando desvinculado do terminal chama-se rodar em background. Administração de processos Execução de Comandos em Background e Foreground Se for colocado o caractere & na linha de comando, a mesma será executada em background, liberando assim o terminal para outras tarefas. Se por acaso as saídas padrão e de erro do comando submetido em background não forem redirecionadas elas continuaram saindo na tela apesar da execução do comando não estar mais vinculada a ele. Portanto sempre que for usar comandos em background, redirecione tanto a saída padrão, como a saída de erro. Deve ser colocado com sendo o último caractere da linha de comando; # ls –la –R / > teste.txt 2>&1 & [1] 22925 Administração de processos Execução de Comandos em Background e Foreground Comando jobs O comando interno jobs mostra a situação de todos os processos que estão em background e que foram submetidos debaixo da sessão corrente. Um processo pode estar em situação suspensa ou rodando. Os processos estão numerados conforme o número indicado na submissão em background. Estas informações estão armazenadas em uma tabela interna do processo shell e é perdida quando se termina a sessão e o processo. # ls –la –R / > teste.txt 2>&1 & [1] 22925 # jobs [1]+ Running ls --color=tty -la -R / >teste.txt 2>&1 & Administração de processos Execução de Comandos em Background e Foreground Comando bg Para ativar um processo parado podemos usar os comandos internos bg , bastando fornecer o número do processo indicado pelo comando jobs ou alguma string de caracteres que identifique o processo. Com o comando interno bg esta se indicando que o processo deve voltar a executar em background. # jobs [1]+ Stopped ls --color=tty -la -R / >teste.txt 2>&1 # bg %1 [1]+ ls --color=tty -la -R / >teste.txt 2>&1 & # jobs [1]+ Running ls --color=tty -la -R / >teste.txt 2>&1 & Administração de processos Comando nohup Todos os processos que o usuário roda está ligado ao seu processo shell de sessão. O Unix/Linux possui a característica de que se o processo principal termina, todos os seus filhos serão encerrados. Isto torna-se um problema quando temos que rodar um comando ou programa demorado e não podemos manter a sessão aberta. O comando nohup serve para desligar um processo do processo shell da sessão permitindo assim que se encerre a sessão sem prejuízo da execução do programa ou comando. Deve-se sempre colocar o comando para rodar em background pois o nohup não faz isto automaticamente. # nohup ls –la /etc > teste.txt 2>&1 & [1] 23013 Administração de processos Comando kill Quando se quer matar um processo, seja em background seja em foreground (de outro terminal) devemos usar o comando kill. Deve-se fornecer para este comando o número do PID do processo que se quer eliminar. Somente o proprietário do processo e o usuário root podem enviar sinais. Opcionalmente podemos estabelecer o tipo de sinal a ser mandado para o processo. Para isto basta se colocar o número ou mnemônico do mesmo. Caso não se coloque nenhum sinal, será enviado o sinal 15(TERM) para o processo. Os sinais mais importantes são: 15 (TERM): Interrupção amena do processo. Este sinal pode ser interceptado e ignorado pelo process; 9 (KILL): Interrupção forçada do processo. Este sinal não pode ser interceptado e nem ignorado pelo processo; 24 (STOP): Suspende a execução de um processo. Este sinal também não pode ser interceptado e ignorado; 26 (CONT): Ativa a execução de um processo suspenso. Administração de processos Exemplos utilizando o script tempo.sh abaixo. tempo.sh #/bin/bash trap "echo Não vou terminar!!!" 15 //intercepta sinal 15 while true do sleep 1 done #bash tempo.sh & [1] 23064 #kill -15 23064 Não vou terminar!!! #kill -9 23064 [1]+ Killed bash tempo.sh Administração de processos 1. 2. 3. Exercícios Verifique quais os processos em atividade no sistema atualmente, identificando o uso de memória e CPU de cada um (dica: use o comando ps auxw | less). Identifique o significado de cada uma das colunas da listagem obtida (ver a página de manual). Quais os processos que mais consomem recursos do sistema ? Implemente o exemplo dado nesta aula no comando kill utilizando o shell script tempo.sh. Envie a resposta do primeiro item e o print screen do resultado do segundo item para o email do professor.