Neste cap�tulo apresentaremos o conceito de processo e muitos outros que lhe s�o aparentados. Percorreremos numerosos exemplos de uso de comandos unix diretamente ou indiretamente relacionados ao tema. Show Conceitos:
Ferramentas:
2.1. [conceito de processo] Em sistemas multitarefa (como o unix), m�ltiplas tarefas podem estar sendo realizadas simult�neamente, por exemplo a formata��o de um disquete, a impress�o de um arquivo e a edi��o de um texto. A cada uma delas corresponde um programa que a executa. Um programa em execu��o � um processo. Num computador que possui apenas uma cpu, na verdade apenas um processo pode estar sendo executado em cada instante. O que se faz � executar um processo durante uma fra��o fixa de segundo, congel�-lo e passar a executar um outro durante essa mesma fra��o de segundo, e assim por diante. Isso cria a ilus�o de simultaneidade. 2.2. [o comando ps] Atrav�s do comando ps pode-se examinar os processos correntes. Por exemplo: hal:~$ ps PID TTY STAT TIME COMMAND 45 v02 S 0:00 -bash 105 v02 R 0:00 ps Vamos entender o que est� acontecendo: h� um processo (o shell) com o qual voc� dialoga a fim de executar comandos. Esse � o processo de n�mero 45. O comando solicitado consiste na execu��o do programa ps. Esse programa, ao ser executado, descobre que neste momento h� dois processos: ele pr�prio (de n�mero 105) e o shell. Na verdade al�m desses dois pode haver muitos outros que o ps n�o exibe para n�o poluir a sa�da. Atrav�s das op��es a e x entretanto pode-se exibir todos os processos correntes: hal:~$ ps ax PID TTY STAT TIME COMMAND 1 ? S 0:00 init [5] 6 ? S 0:00 bdflush (daemon) 7 ? S 0:00 update (bdflush) 25 ? S 0:00 /usr/sbin/crond -l10 36 ? S 0:00 /usr/sbin/syslogd 38 ? S 0:00 /usr/sbin/klogd 40 ? S 0:00 /usr/sbin/inetd 101 v01 S 0:00 /sbin/agetty 38400 tty1 linux 106 ? Z 0:00 (atrun) 45 v02 S 0:00 -bash 107 v02 R 0:00 ps ax Neste caso, todos os processos al�m do shell e o ps dizem respeito apenas � administra��o do sistema. O agetty (por exemplo) � o processo que est� controlando o login no console virtual 1. � a ele que voc� informa o seu username e password ao logar nesse console. O n�mero de um processo � usado para identific�-lo dentre os outros, por exemplo quando � necess�rio interromper prematuramente a sua execu��o. O unix vai numerando os processos em ordem crescente, � medida em que v�o sendo criados. Exerc�cio 2.3: reproduza os exemplos acima de uso do ps, e experimente tamb�m us�-lo com a op��o "u" (por exemplo "ps u" ou "ps aux". Exerc�cio 2.4: invoque a man page do ps com "man ps" e leia nela o que significa o campo "STAT". Lembre-se que voc� pode localizar palavras ao ler uma man page com o comando "/" (para uma lista de comandos pressione "h"). Exerc�cio 2.5: Em geral h� um limite superior pequeno para o n�mero que um processo pode ter (por exemplo 32767). O que voc� acha que acontece quando esse limite � atingido? Exerc�cio 2.6: Em unix, mesmo algumas opera��es extremamente simples como listar os arquivos de um diret�rio envolvem o disparo de pelo menos um novo processo. No entanto a troca do diret�rio corrente (comando "cd") n�o provoca o disparo de processo algum. Voc� saberia explicar porqu�? 2.5. [execu��o em background] Por vezes um processo pode ser de execu��o demorada. Enquanto ele n�o terminar, o shell permanecer� aguardando, e voc� tamb�m. Para evitar esse problema, pode-se disparar o processo em "background". Vejamos um exemplo. O comando abaixo ir� comprimir todos os arquivos do diret�rio corrente. Compress�o de arquivos � uma t�pica opera��o exigente em termos de cpu, por isso um comando assim pode ser demorado: hal:~$ gzip -9 * Enquanto a compress�o n�o terminar, voc� n�o poder� usar o shell para disparar novos comandos. Se, por outro lado, essa compress�o for colocada em background, o shell permanecer� livre para novos comandos: hal:~$ gzip -9 * & � a ocorr�ncia do caracter "&" no final do comando instrui o shell para dispar�-lo em "background". Exerc�cio 2.6: crie um subdiret�rio, povoe ele com arquivos e use-o para disparar a compress�o em background como indicado acima. Por exemplo: hal:~$ cd hal:~$ mkdir lixo hal:~$ cd lixo hal:~$ cp /bin/* . hal:~$ gzip -9 * & hal:~$ ps u (... outros comandos ...) hal:~$ cd ; rm -rf lixo 2.7. [Prioridade] Num sistema operacional onde v�rios processos podem estar simult�neamente em execu��o, surge �s vezes o problema de ser necess�rio privilegiar ou desprivilegiar a execu��o de um processo ou um grupo de processos. Para agilizar a execu��o de um processo urgente ou para evitar que um processo demorado atrapalhe a execu��o de outros, o sistema operacional atribui a cada processo uma prioridade, que pode ser alterada quando necess�rio. Neste curso iremos limitar-nos ao comando "nice". Com ele, pode-se disparar um processo com baixa prioridade, o que significa que o sistema operacional ir� privilegiar a execu��o dos outros processos em detrimento a ele. O uso t�pico do "nice" � impedir que um processo demorado atrapalhe o uso interativo do sistema pelo(s) usu�rio(s) logados nele. No exemplo que demos antes da compress�o, o disparo atrav�s do nice seria assim: hal:~$ nice gzip -9 * & Exerc�cio 2.8: Leia a man page do comando renice para saber como alterar a prioridade de um processo ap�s o seu disparo. 2.9. [O que � Environment?] Environment � uma cole��o de vari�veis que servem de par�metros para os programas que o sistema executa. Uma das mais conhecidas delas, comum ao unix e ao msdos � a vari�vel PATH. Quando se solicita na linha de comandos do shell a execu��o de um programa o shell ir� procur�-lo nos diret�rios relacionados na vari�vel PATH. Frequentemente torna-se necess�rio para o usu�rio lidar com essas vari�veis para customizar os aplicativos que utiliza, por isso conv�m ter algumas no��es precisas nesse campo. Vejamos um exemplo simples. O comando "man" via de regra consulta a vari�vel "PAGER" para saber qual paginador � o preferido do usu�rio. O paginador padr�o costuma ser o "more", mas h� outros, como o "less" da Free Software Foundation. Ao invocar uma man page (por exemplo "man ps") voc� poder� identificar o paginador em uso atrav�s do prompt de comandos ":" t�pico do less no canto inferior esquerdo ou pela string "more" t�pica do more no mesmo canto. Uma pessoa que prefira usar o more ir� atribuir "more" � vari�vel PAGER, enquanto uma pessoa que prefira o less ir� atribuir "less". Uma diferen�a importante entre as vari�veis PATH e PAGER citadas � que PATH � consultada principalmente pelo shell, enquanto que PAGER � consultada por uma aplica��o (man) disparada atrav�s do shell. No msdos isso seria irrelevante porque as vari�veis de environment s�o "do sistema", pouco importando quem as est� consultando. No unix, o environment � "per-process", portanto o shell precisa ser "avisado" de que aquela vari�vel deve ser exportada para as aplica��es: hal:~$ set PAGER=more hal:~$ export PAGER Um outro detalhe � que nesse ponto a sintaxe depende do shell em uso. O unix conta com basicamente duas fam�lias de shells, uma baseada no Bourne Shell e outra no C Shell. Num shell com sintaxe estilo C-shell os comandos anteriores teriam que ser substit�dos pelo "setenv": hal:~$ setenv PAGER=more Exerc�cio 2.10: examine o valor da vari�vel PAGER. Um modo de fazer isso � executar o comando "echo $PAGER". O comando "set" executado sem argumentos exibe todas as vari�veis atualmente definidas. Exerc�cio 2.11: atribua repetidamente "more" e "less" para a vari�vel PAGER conforme os exemplos acima executando tamb�m uma leitura de man page (por exemplo "man ps") para confirmar a troca do paginador. Exerc�cio 2.12: examine o(s) arquivo(s) de inicializa��o do shell que voc� usa para saber quais vari�veis s�o criadas ou inicializadas neles. Esses arquivos s�o citados em geral no final da man page (se��o "FILES"). 2.13 [O que � swap?] A mem�ria � um dos componentes mais caros de um computador. Ao mesmo tempo, a situa��o habitual � que possuimos menos mem�ria do que necessitamos para fazer tudo o que queremos. Se pud�ssemos visualizar os acessos � mem�ria do computador, perceber�amos que algumas regi�es dela permanecem sem serem acessadas durante per�odos de tempo relativamente longos. Por exemplo: se voc� estiver com v�rias aplica��es disparadas mas usando apenas uma delas, as �reas de mem�ria ocupadas pelas outras n�o estar�o sendo acessadas. Por causa disso sistemas operacionais como o unix usam o conceito de "mem�ria virtual". Cria-se um espa�o de mem�ria fict�cio bem maior do que o que realmente existe. Por exemplo: se o seu computador possui 32 megabytes de mem�ria, ele passar� a ter, digamos, 64 megabytes de "mem�ria virtual". Isso significa que a soma de toda a mem�ria requisitada por todos os processos em execu��o pode ser 64 megabytes ao inv�s de 32. Bem... e os outros 32? ser�o alocados 32 megabytes do winchester para eles. Assim, num determinado momento, um processo pode estar apenas parcialmente residindo na mem�ria. O sistema operacional determina uma estrat�gia para escolher o que manter na mem�ria f�sica e o que manter no disco. Havendo necessidade, pode-se subitamente enviar ao disco parte do que est� na mem�ria ou vice-versa. Esse processo � chamado "swap", e a regi�o do disco alocada � chamada "�rea de swap". Assim, se voc� permanecer algum tempo sem usar uma aplica��o, poder� acontecer que ao tentar us�-la novamente haver� um delay significativo para a sua resposta. � o sistema operacional trazendo de volta � mem�ria partes desse processo que estavam residindo em disco. Exerc�cio 2.14: No Linux h� um comando que apresenta dados de ocupa��o da mem�ria e da �rea de swap ("free"). D� uma olhada na man page dele e experimente us�-lo. 2.14 [o comando kill] Uma m�quina rodando unix dificilmente trava, mas por vezes uma aplica��o particular pode travar. Nesse caso, n�o � necess�rio reinicializar todo o sistema, mas apenas matar a aplica��o particular que travou, e para isso usa-se o comando "kill". Processos n�o interativos (que n�o est�o amarrados a um terminal para serem encerrados com um comando "quit" ou equivalente) necessitam tamb�m do kill para terem sua execu��o abortada. Um modo simples de testar isso � o seguinte: hal:~$ sh hal:~$ ps PID TTY STAT TIME COMMAND 45 v02 S 0:00 -bash 308 v02 R 0:00 sh 309 v02 R 0:00 ps Neste momento o prompt que voc� ganhou n�o � o do shell que estava em uso (pid=45), mas o do shell rec�m-disparado (pid=308). Dele, voc� pode matar o shell rec�m-disparado voltando ao primeiro: hal:~$ kill -9 308 A finalidade do "-9" � assegurar que o processo ser� morto, pois, como veremos no pr�ximo par�grafo, nem sempre o "kill" mata o processo atingido. Exerc�cio 2.15: tente reproduzir o exemplo que acabamos de dar. 2.15 [O que � hangup?] Suponha que voc� disparou um processo cuja execu��o ainda n�o encerrou, mas voc� precisa fechar a sess�o e ir embora para casa. Uma situa��o t�pica em que isso ocorre � quando se faz download de um arquivo grande pela Internet. O "logout" ir� abortar a execu��o daquele processo, exceto no caso em que ele foi protegido contra o "hangup". O que vem a ser isso? Quando a sess�o � encerrada, o processo n�o terminado n�o � abortado explicitamente. O que ocorre � que ele � submetido a um "hangup". O unix pode enviar a qualquer processo um dentre v�rios "sinais". O sinal 9 por exemplo � o sinal "SIGKILL", e o efeito dele � invariavelmente abortar imediatamente a execu��o do processo. O sinal 15 costuma ser o "SIGTERM". A inten��o dele � "avisar" o processo que dentro de alguns segundos ele receber� um sinal "SIGKILL". Um editor de textos nesse momento salvar� todos os buffers para evitar a perda do trabalho do usu�rio. Voc� pode enviar qualquer um dos sinais a qualquer um dos seus processos atrav�s do comando "kill". De fato, a finalidade do comando "kill" n�o � matar um processo, mas enviar a ele um sinal. O sinal 1 � o SIGHUP. O logout de que fal�vamos no in�cio faz com que os processos disparados naquela sess�o e ainda n�o encerrados recebam o sinal 1. O sinal 1 � usado para fazer com que alguns processos importantes como o init ou o inetd releiam o seu arquivo de configura��o, com isso reconfigura-se um servidor sem interrup��o do servi�o. Fora esses casos, h� somente dois modos de um processo reagir ao sinal 1. O primeiro e mais comum � abortar. O segundo � ignorar o sinal. A fim de que um processo possa ignorar o hangup � necess�rio que ele tenha sido preparado para isso. O modo de faz�-lo � usar o comando "nohup". 2.17 [Shell scripts] Todo processo foi um dia um arquivo execut�vel. Se fal�ssemos de processos sem criar um desde o in�cio, nossa exposi��o estaria incompleta. O arquivo execut�vel mais simples que podemos criar � um "shell script", que corresponde no msdos aos arquivos ".BAT". Vejamos um exemplo elementar: hal:~$ ps ax PID TTY STAT TIME COMMAND 1 ? S 0:00 init [5] 6 ? S 0:00 bdflush (daemon) 7 ? S 0:00 update (bdflush) 25 ? S 0:00 /usr/sbin/crond -l10 36 ? S 0:00 /usr/sbin/syslogd 38 ? S 0:00 /usr/sbin/klogd 40 ? S 0:00 /usr/sbin/inetd 101 v01 S 0:00 /sbin/agetty 38400 tty1 linux 106 ? Z 0:00 (atrun) 45 v02 S 0:00 -bash 107 v02 R 0:00 ps ax0 Digitando essas tr�s linhas e um Control-D ao final, voc� criar� um arquivo chamado "teste" no diret�rio corrente cujo conte�do s�o as duas linhas, aquela que come�a com "#" e a com o "ls". A primeira informa ao sistema operacional que o interpretador a ser utilizado para executar o script � o shell /bin/sh, que costuma ser o interpretador default. A segunda vai executar um ls e redirecionar a linha para o wc, que vai contar o n�mero de linhas (op��o -l). Como o ls foi informado para colocar a sa�da em modo "longo" (op��o -l), o efeito do script � contar o n�mero de entradas do diret�rio corrente. S� falta uma coisa para esse script funcionar. � necess�rio setar o atributo de executabilidade do arquivo teste. Maiores detalhes sobre isso ser�o dados na aula sobre filesystem. Por ora, basta sabermos que � necess�rio dar o seguinte comando: hal:~$ ps ax PID TTY STAT TIME COMMAND 1 ? S 0:00 init [5] 6 ? S 0:00 bdflush (daemon) 7 ? S 0:00 update (bdflush) 25 ? S 0:00 /usr/sbin/crond -l10 36 ? S 0:00 /usr/sbin/syslogd 38 ? S 0:00 /usr/sbin/klogd 40 ? S 0:00 /usr/sbin/inetd 101 v01 S 0:00 /sbin/agetty 38400 tty1 linux 106 ? Z 0:00 (atrun) 45 v02 S 0:00 -bash 107 v02 R 0:00 ps ax1 A partir de agora o script pode ser executado como qualquer outro programa: hal:~$ ps ax PID TTY STAT TIME COMMAND 1 ? S 0:00 init [5] 6 ? S 0:00 bdflush (daemon) 7 ? S 0:00 update (bdflush) 25 ? S 0:00 /usr/sbin/crond -l10 36 ? S 0:00 /usr/sbin/syslogd 38 ? S 0:00 /usr/sbin/klogd 40 ? S 0:00 /usr/sbin/inetd 101 v01 S 0:00 /sbin/agetty 38400 tty1 linux 106 ? Z 0:00 (atrun) 45 v02 S 0:00 -bash 107 v02 R 0:00 ps ax2 Shell scripts podem ser bastante complexos, incluindo comandos para intera��o com o usu�rio, controle de loops, varredura das entradas de um diret�rio, e muito mais. Exerc�cio 2.18: siga os passos acima para criar o script teste e execute-o em v�rios diret�rios como /etc, /tmp, etc. Exerc�cio 2.20: voc� sabe porque colocamos o "./" antecedendo o nome do script teste acima? 2.20 [Scripts em awk] Al�m dos shells, o unix conta com v�rios outros interpretadores que podem ser usados para a cria��o de scripts. Talvez o mais tradicional seja o awk. Outros que surgiram mais recentemente s�o o perl e o tcl. Os tr�s possuem vers�es para sistemas n�o-unix, inclusive msdos. O perl em particular � bastante poderoso e eficiente, sendo muito utilizado atualmente em servidores web. A t�tulo ilustrativo daremos dois exemplos simples de scripts awk, que cont�m alguns dos conceitos fundamentais dessa linguagem. Vamos ao primeiro. Note que ele � composto por tr�s blocos. O primeiro, com o label "BEGIN", � executado antes de qualquer leitura da entrada. O segundo � executado uma vez para cada linha lida da entrada, e o terceiro, com o label "END", � executado ao t�rmino da leitura da entrada. hal:~$ ps ax PID TTY STAT TIME COMMAND 1 ? S 0:00 init [5] 6 ? S 0:00 bdflush (daemon) 7 ? S 0:00 update (bdflush) 25 ? S 0:00 /usr/sbin/crond -l10 36 ? S 0:00 /usr/sbin/syslogd 38 ? S 0:00 /usr/sbin/klogd 40 ? S 0:00 /usr/sbin/inetd 101 v01 S 0:00 /sbin/agetty 38400 tty1 linux 106 ? Z 0:00 (atrun) 45 v02 S 0:00 -bash 107 v02 R 0:00 ps ax3 O programa acumula na vari�vel t todos os n�meros lidos nas quintas colunas de cada linha da entrada, exceto quando essa quinta coluna cont�m a string "SIZE". Esse script foi feito para trabalhar em conjunto com o ps. Se voc� chamar o script de "s5", o modo de usar � assim: hal:~$ ps ax PID TTY STAT TIME COMMAND 1 ? S 0:00 init [5] 6 ? S 0:00 bdflush (daemon) 7 ? S 0:00 update (bdflush) 25 ? S 0:00 /usr/sbin/crond -l10 36 ? S 0:00 /usr/sbin/syslogd 38 ? S 0:00 /usr/sbin/klogd 40 ? S 0:00 /usr/sbin/inetd 101 v01 S 0:00 /sbin/agetty 38400 tty1 linux 106 ? Z 0:00 (atrun) 45 v02 S 0:00 -bash 107 v02 R 0:00 ps ax4 Nosso segundo exemplo introduz um conceito important�ssimo em linguagens como awk e perl, a saber, o de "vetor associativo". Qualquer programador conhece o conceito de vetor, mas alguns nunca se depararam com vetores associativos. Neles, ao inv�s de �ndices num�ricos, t�m-se strings como �ndices. Isso � de extrema utilidade em processamento de texto de forma geral. hal:~$ ps ax PID TTY STAT TIME COMMAND 1 ? S 0:00 init [5] 6 ? S 0:00 bdflush (daemon) 7 ? S 0:00 update (bdflush) 25 ? S 0:00 /usr/sbin/crond -l10 36 ? S 0:00 /usr/sbin/syslogd 38 ? S 0:00 /usr/sbin/klogd 40 ? S 0:00 /usr/sbin/inetd 101 v01 S 0:00 /sbin/agetty 38400 tty1 linux 106 ? Z 0:00 (atrun) 45 v02 S 0:00 -bash 107 v02 R 0:00 ps ax5 Se chamarmos o script de "grandes", ent�o a forma de us�-lo ser� "ls -l|grandes". A sa�da dele � composta pelos arquivos no diret�rio corrente com tamanho superior a 10000 bytes. Exerc�cio 2.21: Teste os scripts dados neste par�grafo. Voc� pode seguir os passos descritos no par�grafo anterior para criar o arquivo e torn�-lo execut�vel. Se voc� tiver experi�ncia com algum editor de textos unix use-o. 2.21 [at e cron] � frequente programar-se a execu��o de processos para hor�rios de baixo uso da cpu ou de algum outro recurso, tipicamente de madrugada ou fins de semana. No unix isso � feito atrav�s do comando "at". Processos que necessitam ser executados de forma peri�dica, por exemplo uma limpeza di�ria em diret�rios de arquivos tempor�rios como /tmp, s�o disparados pelo "cron". Processos disparados dessa forma n�o est�o amarrados a um terminal, e por isso n�o t�m para onde enviar a sua sa�da ou mensagens de erro, que via de regra s�o retornadas ao usu�rio por mail. Vejamos um exemplo. hal:~$ ps ax PID TTY STAT TIME COMMAND 1 ? S 0:00 init [5] 6 ? S 0:00 bdflush (daemon) 7 ? S 0:00 update (bdflush) 25 ? S 0:00 /usr/sbin/crond -l10 36 ? S 0:00 /usr/sbin/syslogd 38 ? S 0:00 /usr/sbin/klogd 40 ? S 0:00 /usr/sbin/inetd 101 v01 S 0:00 /sbin/agetty 38400 tty1 linux 106 ? Z 0:00 (atrun) 45 v02 S 0:00 -bash 107 v02 R 0:00 ps ax6 O "at" executar� o script que ler da entrada padr�o (algumas implementa��es do "at" ao inv�s de ler um script da entrada padr�o esperam um nome de script na linha de comandos). No caso, a entrada padr�o � digitada manualmente e consiste apenas do comando "ls" (ap�s digitar o "ls" seguido do "enter", pressione control-d). Dentro de um minuto voc� receber� um mail com o conte�do do diret�rio corrente, e poder� l�-lo com o comando "Mail" (por exemplo). Exerc�cio 2.22: Leia na man page do at de que formas voc� pode especificar um hor�rio para ele. Cheque tamb�m nessa man page como fazer para listar os jobs aguardando o momento da execu��o. 2.22 [o que s�o threads?] O advento da linguagem Java tem ajudado a popularizar o termo "thread". Do ponto de vista do usu�rio, � dif�cil distinguir "thread" de "processo", e na verdade h� livros que confundem os dois conceitos. Se voc� j� acessou uma p�gina web com duas figuras se movimentando, ao mesmo tempo em que se pode usar o mouse e o teclado para preencher um formul�rio, ent�o voc� talvez tenha tido a impress�o de que havia v�rios processos em execu��o simult�nea, mas na verdade o que havia eram v�rios "threads". A diferen�a entre processo e thread � que a �rea de dados de um processo � pr�pria, enquanto a de um thread n�o. Isso significa que cada processo tem a sua pr�pria �rea de dados, em geral inacess�vel aos outros, enquanto os threads compartilham uma mesma �rea de dados. � dif�cil visualizar exatamente o que significa isso sem conhecer aspectos internos de sistemas operacionais e sem ter no��es relativamente avan�adas de programa��o, mas como regra geral conv�m recordar que se tratam de conceitos distintos, e � por isso mesmo que possuem nomes distintos. Como ver os processos no Linux?Aqui estão alguns exemplos úteis sobre como você pode usar o comando “ps”:. ps -ef – Lista os processos que estão sendo executados agora. ... . ps -f -u user1,user2 – Exibirá todos os processos com base no UID fornecido (ID do usuário ou nome de usuário).. ps -f --pid id – Exibe processos baseados em um ID de processo (pid).. Como podemos visualizar os processos correntes no sistema operacional Windows?É possível exibir a lista dos processos em curso no gerenciador de tarefas pressionando, simultaneamente, CTRL + ALT + DEL e, em seguida, clicando na guia Processo.
Como ver os serviços em execução no Linux?O comando ps lista os processos em execução no sistema. Porém, diferentemente do top, ele não traz informações sobre o quanto de processamento ou de memória ele está consumindo. Apesar disso, o ps é uma maneira bem mais ágil de consultar o PID de um processo, principalmente ao ser usado em conjunto com o grep.
Como ver os processos no Ubuntu?Então utilize o comando top no seu terminal agora mesmo — basta digitar top no terminal. Além de mostrar o panorama do que acontece no momento, ele fornece informações detalhadas de cada processos, tais como PID, prioridade (PR), status (S) e percentual de recursos usados da CPU.
|