PROCESSOS Um processo é um canal de comunicação entre os programas que estão sendo executados no sistema operacional e o usuário, ou seja um processo é um programa que está sendo executado. No Linux / Unix os processos utilizam os recursos de forma inteligente diminuindo o uso do processador (CPU), ou seja quando processo de um programa tentar ler ou escrever informações no HD, este processo entrará na fila de espera até finalizar a entrada e saída dados, enquanto isso ocorre, outro processo pode ser executado diminuindo o tempo de uso e acesso do processador, memória RAM e periféricos. Cada processo que está sendo executado armazena um subdiretório com o mesmo número do processo (PID) em /proc, e dentro desses subdiretórios é armazenado informações sobre cada processo nos arquivos cmdline, environ e status. Para exibir os processos são utilizados os comandos ps, pstree e top e para mudar a ordem de prioridade dos processos são usados os comandos nice e renice. Os processos tem prioridades alternando entre -20 (prioridade (maior) e 19 (prioridade menor), o comando nice pode executar um programa com prioridade específicas sendo o seu padrão 10. O comando renice modifica a prioridade de um processo em execução, sendo que somente o usuário root pode executar processos com prioridade negativa e modificar a ordem de execução de processos positivos para negativos. COMPONENTES DE UM PROCESSO A execução de um processo possui vários componentes. PID e PPID A execução de um processo possuem vários componentes PID e PPID O PID (Process Identification - indentificador de processo) é um número de identificação que o sistema exibe a cada processo. Nenhum PID pode existir para dois ou mais processos ao mesmo tempo, devendo ser gerado um novo numero a cada um novo processo. Quando isso ocorre, o processo "copiado" recebe o nome de "processo pai", enquanto que o novo é denominado "processo filho". É justamente nesse momento que o PPID (Parent Process Identification - indentificador de processo pai) passa a ser usado, sendo gerado em função do processo pai, o PID. UID e GID Lembrando que cada processo necessita de um proprietário, ou seja, um usuário que seja considerado seu dono. Nesse ponto, o sistema irá identificar, quem pode ou não executar o processo em questão, isso de acordo com as permissões do usuário. Para lidar com os donos, o sistema utiliza os números UID e GID. No Linux os usuários e os grupos são gerenciados através dos números UID (User Identifier) e GID (Group Identifier). Como podemos perceber, que UID são números de usuários e GID são números de grupos. No processo podemos visualizar os usuários e grupos, facilitando a sua visualização e somente o usuário root pode finalizar processos criados por outros usuários CLASSIFICAÇÃO DOS PROCESSOS Abaixo podemos distinguir a classificação dos processos utilizados no sistema Linux / Unix. Foreground (primeiro plano) Os comandos quando executados em primeiro plano no terminal de comandos, passam a interagir junto com o usuário, exibindo a sua execução na tela do computador. Esses processos ficam fixos no prompt, impedindo que outros processos sejam inicializados no terminal. Background (segundo plano) Os processos executados em background podem ser inicializados no terminal de shell, não há interação com o usuário e nenhuma execução visível na tela do computador. Esses processos não seguram o prompt de comandos, permitido assim que outros processos sejam inicializados no terminal. TIPOS DE PROCESSOS Processos dinâmicos A partir de uma sessão de usuário, os processos dinâmicos são executados inicialmente em um terminal de comandos e gerenciado por ele. Quando se executa um comando no terminal, geralmente ele é processado em modo foreground (primeiro plano). Para interromper um processo utiliza-se as teclas <CTRL> + <Z>, onde automaticamente será exibido a mensagem "Stopeed" e o número do job entre colchetes [ ] desse processo, e para cancelar um processo utiliza-se as teclas <CTRL> + <C>. Para controlar o gerenciamento de processos são utilizados os comandos fg, bg e jobs. Exemplo: $ xeyes <CTRL> + <Z> [1]+ Stopped xeyes $ xeyes <CTRL> + <C> GERENCIAMENTO DE TAREFAS (JOBS) É a maneira pelo o qual os processos são finalizados e retornados ao seu estado inicial, os processos são executados no terminal de comandos através de comandos de shell pelo usuário, podendo um job armazenar um ou mais processos que podem ser visualizados pelo comando jobs. No exemplo abaixo é executado o programa xeyes em backgroung &. $ xeyes & [1] 3480 $ jobs -l [1]+ 3480 Running xeyes & Acima é exibido o número do job [1] e o PID do processo 3480. COMANDOS DE GERENCIAMENTO DE PROCESSOS CTRL + C (finaliza um processo) CTRL + Z (interrompe um processo) & - Executa um comando(processo) em background (segundo plano) Exemplo: $ firefox & bg - Põe um comando(processo) em background (segundo plano) %id Número do job colocado em segundo plano. Exemplo: $ xeyes CTRL + Z [1] + Stopped xeyes $ bg %1 [1]+ xeyes & fg - Coloca um processo em primeiro plano (background) %id - Número do job colocado em primeiro plano. Exemplo: $ top & [1] 3004 $ fg %1 CTRL + C jobs - Exibe os jobs em execução Opção Significado -l Exibe o nome e o numero de cada processo -s Exibe o nome de cada processo -p Exibe o numero de cada processo Exemplo: $ $ $ $ firefox & jobs jobs -l jobs -p ps - Mostra informações sobre processos em execução Opção Significado -A Mostra todos os processos -a Mostra informações de outros usuários -u Mostra o nome do usuário e o horário de início do processo -x Mostra processos do terminal corrente e de outros terminais -p Mostra o número do processo PID Exemplo: $ firefox & $ ps -aux $ ps -aux | grep firefox Abaixo seguem as opções exibidas na saída dos comandos: Opção USER PID Significado Nome do usuário dono do processo ID do processo %CPU %MEM VSZ RSS TTY Porcentagem do consumo de CPU Porcentagem do consumo de memória Tamanho virtual do processo Número de páginas na memória(Resident Set Size) TTY do terminal STAT Estado processo: R (executável), S (Dormente (< 20 segundos)), Z (Zumbi), D (espera no disco(curto prazo)), T (rastreado ou interrompido) Outras opções adicionais: W (processo paginado em disco), < (prioridade do processo maior que o normal), N (prioridade do processo menor que o normal), L (páginas bloqueadas no kernel do sistema) START TIME COMMAND Horário de início do processo Tempo de consumo do processador (CPU) consumido pelo processo Nome do comando e opções pstree - Mostra informações sobre processos em execução em forma de árvore Opção -a -c -l -n -p Significado Mostra opções de comandos no terminal . Não compacta subárvores. Mostra linhas de forma detalhada Classifica os processos pelo PID Exibe o PID dos processos. Exemplo: $ pstree -p $ pstree -nap pidof - Exibe o PID do processo informado Opção -s -x Significado Exibe apenas o PID Exibe o PID do script que está sendo executado Exemplo: $ top & $ pidof top top - Visualiza os processos com o maior uso do processador (CPU) Opção -u -U -d (n) Significado Mostra processos de um usuário específico Não mostra processos de um usuário específico Atualiza a tela do monitor a cada n segundos Exemplo: $ top $ top -u aluno1 $ top -u aluno1 -d 3 (atualiza os processos do usuário aluno1 a cada 3 segundos) free - Visualiza a quantidade de memória livre e usada pelo sistema Opção Significado -b -k -m -g -o -s (n) Mostra informações em bytes (Bytes) Mostra informações em kbytes (KB) Mostra informações em megabytes (MB) Mostra informações em gigabytes (GB) Mostra os dados de memória sem exibir a memória utilizada como buffer Mostra os dados de memória a cada n segundos Exemplo: $ free - -help $ free $ free -m $ free -s 3 (atualiza os processos do usuário aluno1 a cada 3 segundos) vmstat - Exibe estatística de utilização da memória swap Opção -n -V Significado Mostra as informações de uma só vez Exibe a versão do comando Exemplo: $ vmstat - -help $ vmstat $ vmstat -n $ vmstat 1 3 (atualiza o comando a cada 1 segundo 3 vezes) kill - Finaliza um processo pelo PID Opção -V -l Significado Exibe a versão Lista todos os nomes e números de sinais . O sinal padrão para o kill é TERM(encerramento por hardware), usando a opção -l no comando kill são exibidos todos os sinais, como HUP (suspender), INT (interromper), KILL (destruir), STOP (parar), QUIT (sair) e etc. Para mais detalhes sobre os sinais use o comando man kill. Para matar um processo são utilizadas 3 maneiras usando os sinais negativos: -9, -SIGKILL e -KILL. Exemplo: $ kill -l $ kill -l KILL 9 $ top & [1] 3357 $ kill -9 3357 ou $ kill -KILL 3357 ou $ kill -SIGKILL 3357 killall - Finaliza processos pelo nome Opção Significado -V Exibe a versão -l Lista todos os nomes e números de sinais. Exemplo: $ kill -l $ xeyes & [1] 3409 $ killall xeyes [1]+ Terminado $ top & [1] 3357 $ killall -9 top ou $ killall -KILL top ou $ killall -SIGKILL top nohup - Continua executando um comando mesmo que o usuário saia do sistema Exemplo: $ nohup find /usr | grep adduser & nice - Executa um processo com prioridade de execução Opção Significado --help --version Mostra uma mensagem de ajuda Mostra a versão do comando (prioridade) Valor da prioridade do processo, sendo que quanto maior o valor, menor será a prioridade de escalonamento do processo, variando entre os valores -20 a +19, sendo -10 o valor padrão de prioridade. Exemplo: $ nice -1 firefox renice - Modifica a prioridade de um processo em execução opção Significado (prioridade) Valor que deve ser atribuído à prioridade do processo -p (número) -u (usuário) -g (grupo) Processo Nome do usuário Grupo do usuário Exemplo: $ firefox & [2] 3429 $ renice +19 3429 (modifica a prioridade do processo 3429 para +19) 3429: prioridade antiga = 0; prioridade nova = 19 $ renice -1 -p 3429 (modifica a prioridade do processo 3429 para -1) 3429: prioridade antiga = 19; prioridade nova = -1 # renice -20 -u aluno1 (modifica a prioridade para -20 de todos os processos do usuário aluno1) 3429: prioridade antiga = -1; prioridade nova = -20