Linux II: programas, processos e pacotes | Alura Cursos Online
Primeiras aulas do curso Linux II: programas, processos e pacotes
Kill, ps, grep - Kill, ps e grep
Bem-vindo ao Curso de Linux II: Programas, processos e pacotes! Neste curso, que é continuação do Curso de Linux I: Conhecendo e utilizando o terminal iremos aprender diversas coisas:
Descobrir quais são os processos que estão sendo executados em nossa máquina e como finalizar tais processos;
Executar programas no background ou no foreground;
Configurar programas para ter permissão de execução;
Procurar arquivos no Sistema Operacional;
Gerenciar novos usuários;
Configurar as permissões de acesso aos arquivos;
Configurar variáveis de ambiente;
Instalar novos programas do zero;
Inicializar e parar serviços que rodam junto com o início da máquina;
Compilar e instalar um programa do zero a partir de seu código fonte;
Fazer o acesso remoto às máquinas que rodam Linux;
Cada comando que invocamos é executado pelo CPU. Alguns são finalizados rapidamente como o ls e o mkdir. Outros demoram mais tempo para parar de executar, alguns exemplos são o firefox e o gedit. Perceba que se, por exemplo, abrirmos o Firefox ou o editor de texto gedit, eles ficam em execução. Para sabermos quais processos estão sendo executados no momento, usamos o comando ps no Terminal.
Perceba que só serão mostrados os processos do bash (Terminal) atual naquele instante e a execução do comando ps. Queremos saber de todos os processos em todo o sistema, então fazemos ps -e. Nos aparecerá uma lista extensa.
Note que o Firefox ainda está em execução. A listagem dos processos exibe não só o nome do processo mas também seu ID. Podemos utilizar o ID para finalizarmos um programa usando o comando kill + ID, para encerrarmos o Firefox, neste caso, fazemos:
kill 16546
Alguns programas, quando abertos novamente, após matarmos seu processo, mostrarão uma mensagem de alerta para dizer que foram fechados de uma maneira diferente da comum (clicando no botão de fechar, por exemplo) e tentam se recuperar, Firefox por exemplo, mostra uma mensagem semelhante a da imagem a seguir:
Muitas vezes não conseguimos matar o processo quando o programa trava e para termos certeza de que conseguiremos finalizá-lo, forçando a finalização, podemos usar o modificador -9 para o comando kill da seguinte forma:
kill -9 16546
A diferença para do kill com e sem o modificador -9 é simples: sem o modificador, o comando solicita o fechamento do programa, dando uma chance para o programa se encerrar sozinho, com o modificador essa chance não existe, o processo é encerrado imediatamente.
Podemos mostrar mais detalhes sobre os processos que estão em execução, além de seu nome e ID. Para isso fazemos ps -ef, este comando mostra a localização dos programas, o instante em que eles foram inicializados e outras informações. A imagem abaixo ilustra a saída desse comando.
Porém ainda fica difícil encontrar um programa que estejamos procurando com essa listagem enorme de processos. Podemos usar o comando ps -ef | grep NomeDoPrograma para filtrar os resultados da listagem:
O comando grep é utilizado para filtragem de dados dada uma entrada, neste caso a entrada é o resultado do comando ps. O | é um redirecionador de saídas de programas para programas, ou seja, ele redireciona a saída do comando ps para ser usada como entrada para o comando grep. Por isso, são mostrados apenas as linhas que possuam a palavra firefox:
O comando grep também serve para pesquisarmos linhas com palavras específicas dentro de um arquivo de texto, no caso do arquivo google.txt que criamos no curso anterior, podemos pesquisar as linhas que tenham a palavra California da seguinte forma:
grep California google.txt
O grep será um comando muito poderoso, pois o utilizaremos sempre que precisarmos encontrar os processos que queremos encerrar ou obter informações.
Killall, top - Killall e top
Os processos consomem uma determinada quantidade de espaço na CPU, mas como podemos descobrir esse consumo? Para isso o Linux disponibiliza um comando chamado top, que mostra a situação dos processos, do processador e da memória, além de outras informações em uma única tela.
Esta lista de processos está organizada pelo uso da CPU, e se atualiza dependendo desse uso. Experimente abrir uma janela do navegador Firefox, por exemplo, e navegar para algum site. Deverá notar uma elevação no consumo de memória e CPU pelo Firefox e depois aos poucos uma queda neste mesmo consumo.
Para vermos um novo comando muito útil, experimente deixar abertas, duas abas executando o comando top. Após isso abra mais uma aba e verifique o status dos processos desses comandos com o comando ps, lembra dele?
Veremos a listagem filtrada exibindo apenas os processos que estão executando o comando top. Nenhuma novidade até aqui:
Visto a lista de processos do top, como podemos fazer para encerrar todos os processos que estão executando esse comando? Poderíamos usar o comando kill fornecendo todos os IDs da seguinte maneira:
kill -9 16905 16977
Ou usando um outro comando que chamado killall. Ele permite matar todos os processos de um mesmo programa, ou seja, com um mesmo nome, sem precisar digitar seus ID's, como era feito antes com o kill. Exemplo:
Podemos usar o modificador - 9 igual fazemos com o comando kill:
Assim, serão finalizados todos os processos com o nome top. Verifique as abas estavam executando o comando top, elas devem ter parado de exibir e atualizar a listagem dos processos em execução.
Jobs, bg, fg, pstree, & - Jobs, bg, fg, pstree, &
Agora que já sabemos visualizar quais processos estão rodando, vamos nos aprofundar um pouco mais em sua análise. Vamos inicialmente abrir o Firefox pelo terminal. Para isso digitamos no terminal o comando firefox.
Quando mandamos executar o Firefox por meio do Terminal, o Terminal fica travado enquanto o Firefox estiver aberto, nós não conseguimos mais digitar quaisquer comandos. Isso acontece porque o Terminal está executando o processo do Firefox dentro dele.
Para podermos continuar trabalhando com os comandos do Terminal, basta abrirmos uma nova aba através do menu superior do Terminal:
Agora podemos voltar a utilizar normalmente o terminal enquanto o outro se ocupa com o Firefox.
Em aulas passadas vimos o comando ps -ef | grep, que nos mostra os processos abertos. Um outro comando útil para visualizarmos esses processos de uma maneira gráfica é o pstree. Com ele podemos ver quais processos estão em execução e dentro de quais programas esses processos estão executando. Veja por exemplo, que o Firefox está rodando dentro do bash (aba) no Terminal:
O processo do Firefox está em execução dentro do Terminal e, com isso, trava o bash no qual foi executado. Queremos que ele continue executando, mas no background desse bash, ou seja, sem travar o Terminal. Apertando CTRL + Z nós paramos temporariamente o processo.
E para visualizarmos os processos que estão parados, utilizamos o comando jobs:
Para jogar o Firefox no background, ou seja, para ser executado em segundo plano, usamos o comando bg+ seu número de identificação, neste caso executamos bg 1 ou só bg se houver apenas um programa na lista de processos pausados. Este comando apresentará uma saída semelhante a listada abaixo:
E assim nosso bash fica destravado, mesmo executando o Firefox. A presença do & da saída anterior, significa que o programa está rodando no background. E se executarmos novamente o comando jobs, veremos algo como:
[1]+    Running             firefox &
Indicando que o Firefox está realmente executando em background. Mas e se quiséssemos fazer o contrário, ou seja, trazer a execução do processo para o foreground? Para trazermos o programa para o foreground fazemos fg 1 e assim, teremos nosso bash travado novamente.
Também podemos encerrar a execução do programa de vez, para isso basta que apertemos as teclas: CTRL + C.
Mas perceba que é um pouco trabalhoso jogarmos um programa para background: temos que abri-lo, fazê-lo parar e dar o comando necessário. Podemos fazer isso direto, ao abrirmos o programa da seguinte forma:
Dessa forma já abrimos o programa em background e temos o terminal livre para continuarmos com demais comandos necessários para nossas atividades.
Nesta aula vimos os seguintes comandos:
jobs: mostra os processos que estão sendo executados dentro do bash;
fg e bg: jogam os processos para foreground e background, respectivamente;
[programa] &: abre o [programa] diretamente em background;
pstree: mostra todos os processos em um gráfico de árvore.
Sobre o curso Linux II: programas, processos e pacotes
O curso Linux II: programas, processos e pacotes possui 55 minutos de vídeos, em um total de 56 atividades. Gostou? Conheça nossos outros cursos de Linux em DevOps, ou leia nossos artigos de DevOps.