Fundamentos de Gerenciamento de Processos no Linux
- 2616
- 522
- Mrs. Christopher Okuneva
Objetivo
Aprenda os fundamentos do gerenciamento de processos no Linux
Sistema operacional e versões de software
- Sistema operacional: - Todas as distribuições Linux
Requisitos
- Alguns programas mencionados neste tutorial exigem acesso à raiz
Dificuldade
FÁCIL
Convenções
- # - requer que os comandos Linux sejam executados com privilégios de raiz também
diretamente como usuário root ou por uso desudo
comando - $ - Requer que os comandos do Linux sejam executados como um usuário não privilegiado regular
Introdução
Uma das principais atividades de um administrador do sistema é o de monitorar e interagir com os processos em execução em uma máquina. Neste tutorial, você será apresentado ao uso de algumas ferramentas fundamentais que o ajudarão a realizar essa tarefa vital.
O comando ps
PS é um dos programas fundamentais usados no monitoramento de processos: basicamente fornece um instantâneo
dos processos em execução em uma máquina no momento em que você invoca o comando. Vamos ver em ação: primeiro tentaremos executá -lo sem nenhuma opção:
$ ps pid tty time cmd 24424 pts/0 00:00:00 bash 24468 pts/0 00:00:00 ps
Como você pode ver na saída acima, apenas dois processos são mostrados: Bash
com um PID
(ID do processo) 24424
e ps
por si mesmo com o PID 24468
. Isso ocorre porque, quando invocado sem nenhuma opção, o ps
O comando mostra processos associados ao Uid
do usuário que lançou o comando e o terminal do qual é invocado.
Como superar esta limitação? Usando o -a
opção que podemos fazer ps
para nos mostrar todos os processos, com exceção do líderes de sessão
e os processos não associados a um terminal.
Um líder de sessão é um processo que tem um PID que é o mesmo do Sid
(ID da sessão) da sessão da qual é (o primeiro) membro. Quando um processo é criado, é feito parte da mesma sessão de seu processo pai: uma vez que, por convenção, o ID da sessão é o mesmo do PID
de seu primeiro membro, chamamos esse processo de líder da sessão
. Vamos tentar correr ps
com o -a
opção e verifique sua saída:
$ PS -A PID TTY TEMPO CMD 12466 TTY1 00:00:00 Gnome-Session-B 12480 TTY1 00:00:17 Gnome-Shell 12879 TTY1 00:00:00 XWayland 12954 Tty1 00:00:00 GSD 12955 TTY1 00:00:00 GSD-WACOM 12957 TTY1 00:00:00 GSD-XSETTINGS 12961 TTY1 00:00:00 GSD-A11Y-KEYBOA 12962 TTY1 00:00:00 GSD-A11Y-Settin 12965 tty1 00:00:00:00 -ClipBoard 12966 TTY1 00:00:03 GSD-CORA 12967 TTY1 00:00:00 GSD-DATETIME 12970 TTY1 00:00:00 GSD-HOUSHEEPIN 12971 TTY1 00:00:00 GSD-STECHOLA 12972 TTTY 12971 -Media-Keys 12973 TTY1 00:00:00 GSD-MOUSE 12976 TTY1 00:00:00 GSD Orientação […]
A saída do programa foi truncada, mas você pode ver facilmente que agora inclui processos que pertencem a diferentes terminais e usuários. A saída nos mostra informações sobre PID
Na primeira coluna, Tty
no segundo, TEMPO
qual é o tempo cumulativo que a CPU passou no processo e Cmd
qual é o comando que iniciou o processo.
Para ter uma saída ainda mais rica, podemos adicionar o -você
e -x
Opções: o primeiro diz ps
Para fazer uma seleção por ID do usuário
, Enquanto este último instrui o programa a incluir também processos não associados a um terminal, como Daemons:
$ ps -aux usuário pid %cpu %mem vsz rss tty stat start time comando root 1 0.0 0.2 223932 8708 ? SS Jul20 0:04/usr/lib/Systemd/Systemd-Switched-Root-System-DeSerialize 25 Raiz 2 0.0 0.0 0 0 ? S Jul20 0:00 [Kthreadd] Raiz 4 0.0 0.0 0 0 ? S< Jul20 0:00 [kworker/0:0H] root 6 0.0 0.0 0 0 ? S< Jul20 0:00 [mm_percpu_wq] root 7 0.0 0.0 0 0 ? S Jul20 0:00 [ksoftirqd/0] root 8 0.0 0.0 0 0 ? S Jul20 0:07 [rcu_sched] root 9 0.0 0.0 0 0 ? S Jul20 0:00 [rcu_bh] root 10 0.0 0.0 0 0 ? S Jul20 0:04 [rcuos/0] root 11 0.0 0.0 0 0 ? S Jul20 0:00 [rcuob/0] root 12 0.0 0.0 0 0 ? S Jul20 0:00 [migration/0] root 13 0.0 0.0 0 0 ? S Jul20 0:00 [watchdog/0] root 14 0.0 0.0 0 0 ? S Jul20 0:00 [cpuhp/0] root 15 0.0 0.0 0 0 ? S Jul20 0:00 [cpuhp/1] root 16 0.0 0.0 0 0 ? S Jul20 0:00 [watchdog/1] root 17 0.0 0.0 0 0 ? S Jul20 0:00 [migration/1] root 18 0.0 0.0 0 0 ? S Jul20 0:00 [ksoftirqd/1] root 20 0.0 0.0 0 0 ? S< Jul20 0:00 [kworker/1:0H] root 21 0.0 0.0 0 0 ? S Jul20 0:02 [rcuos/1] root 22 0.0 0.0 0 0 ? S Jul20 0:00 [rcuob/1] root 23 0.0 0.0 0 0 ? S Jul20 0:00 [cpuhp/2] root 24 0.0 0.0 0 0 ? S Jul20 0:00 [watchdog/2] root 25 0.0 0.0 0 0 ? S Jul20 0:00 [migration/2] root 26 0.0 0.0 0 0 ? S Jul20 0:00 [ksoftirqd/2] root 28 0.0 0.0 0 0 ? S< Jul20 0:00 [kworker/2:0H] [… ] egdoc 13128 0.0 0.1 74736 5388 ? Ss Jul20 0:00 /usr/lib/systemd/systemd --user egdoc 13133 0.0 0.0 106184 420 ? S Jul20 0:00 (sd-pam) egdoc 13143 0.0 0.1 218328 3612 ? Sl Jul20 0:00 /usr/bin/gnome-keyring-daemon --daemonize --login [… ]
Você pode ver que muitas informações novas foram adicionadas. A primeira nova coluna da saída é %CPU
: Isso mostra a utilização da CPU do processo, expressa como uma porcentagem. Uma porcentagem também é usada para a próxima coluna, %Mem
, que mostra a memória física na máquina usada pelo processo. Vsz
é o tamanho da memória virtual do processo expresso em Kib.
O ESTADO
A coluna usa um código para expressar o estado do processo. Não vamos descrever todos os estados possíveis aqui, mas apenas explique os que aparecem na saída acima (você pode ter uma visão geral completa consultando a manpágina do PS).
Vamos examinar o primeiro processo na saída: é PID 1
, Portanto, é o primeiro processo lançado pelo kernel. Isso faz sentido, podemos ver que é Systemd
, O sistema Init Linux relativamente novo, agora adotado por quase todas as distribuições. Primeiro de tudo, temos um S
o que indica que o processo está no estado de sono interrompível
o que significa que está ocioso e acordará assim que receber uma entrada. O s
, Em vez disso, nos diz que o processo é um líder da sessão
.
Outro símbolo, não aparecendo no primeiro cru, mas em alguns dos outros processos descrições é <
o que indica que o processo tem alta prioridade e, portanto, um baixo legal
valor (veremos o que é um bom valor na seção relevante deste tutorial). Um eu
no ESTADO
coluna, indica que o processo é multi-thread e um +
sinal, que está no grupo de processo em primeiro plano.
Finalmente, na última coluna, temos o COMEÇAR
coluna, mostrando a hora em que o comando começou.
Outra boa opção que podemos passar para o ps
comando, é -o
, qual é a versão curta de --formatar
. Esta opção permite modificar a saída pelo uso de espaços reservados, especificando quais colunas mostrar. Por exemplo, executando:
$ ps -ax -o%u%p%n%c
Vai nos dar o DO UTILIZADOR
coluna primeiro (%u), seguido pelo PID
do processo (%p), pelo Ni
coluna (%n), que indica o legal
nível, e finalmente pelo COMANDO
coluna (%c):
Usuário PID NI REATE DE COMANDO 1 0 Systemd Raiz 2 0 Raiz KTHRADD 4 -20 KWORKER/0: 0H ROOT 6 -20 MM_PERCPU_WQ ROOT 7 0 KSOFTIRQD/0 RAOT 8 0 RCU_SCHED ROOT 9 0 RCU_BH RAOT 10 0 RCUOS/0 RAOTE 11 0 RCUOB /0 raiz 12 - migração/0 raiz 13 - cão de guarda/0 raiz 14 0 cpuhp/0 raiz 15 0 cpuhp/1 raiz 16 - cão de guarda/1 raiz 17 - migração/1 raiz 18 0 ksoftirqd/1 raiz 20 -20 kworker/ 1: 0h Raiz 21 0 rcuos/1 raiz 22 0 rcuob/1 raiz 23 0 cpuhp/2 raiz 24 - cão de guarda/2 raiz 25 - migração/2 raiz 26 0 ksoftirqd/2
Usando 'top' para interagir dinamicamente com os processos
Enquanto ps
nos dá um instantâneo estático de processos e suas informações no momento em que você as executa, principal
Nos fornece uma visão dinâmica dos processos, atualizados em um intervalo de tempo especificado que podemos especificar ambos ao iniciar o programa e interativamente (o padrão é de 3 segundos).
Top não apenas nos mostra uma representação dinâmica dos processos de execução: podemos interagir com eles e com o próprio programa, pelo uso de algumas chaves. Por exemplo, pressionando B
Permite alternar o uso de caracteres ousados, d
Permite inserir um valor para alterar o tempo de atraso, k
Permite enviar um sinal para um processo solicitando seu PID
e para o sinal
código, com Sigterm
sendo o padrão.
Mude a prioridade dos processos com Nice e Renice
Como já vimos antes, cada processo tem um prioridade
atribuído a ele, o que indica quanto o processo precisa esperar que outros processos sejam gratuitos antes de poder acessá -los. Essa prioridade pode ser especificada com um valor que está em um intervalo de -20
para 19
. Quanto menor o valor, a maior a prioridade do processo. Isso pode parecer contra-intuitivo no começo, mas veja da seguinte maneira: quanto melhor o processo é para outros processos, mais eles o superarão no acesso aos recursos.
Mas como podemos definir a prioridade de um processo? Podemos usar o legal
programa para realizar a tarefa. Digamos que você deseja executar um script com o menor valor de prioridade possível: você prefácio da seguinte maneira:
$ nice -n 19 ./roteiro.sh
Você também pode alterar a prioridade de um programa que já está sendo executado pelo uso de Renice
Saber é PID
:
# Renice -N 15 pid
Onde PID é o ID do processo do programa. Lembre -se de que o Renice
O comando deve ser executado com permissões raiz.
Envie sinais para processos com os comandos de Kill and Killall
Podemos usar o comando Kill para enviar um sinal
a um processo que pertence a nós ou a todos os processos se tivermos permissões de raiz. Os vários sinais que podemos enviar são identificados por um número: podemos ver facilmente essas correspondências executando o comando de matar com o -eu
opção:
$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) Sigpipe 14) Sigalrm 15) ) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTOU 23) SIGURG 24) SIGXCPU 25) Sigxfsz 26) Sigvtalrm 27) SigProf 28) Sigwinch 29) 35) sigrtmin+1 36) sigrtmin+2 37) sigrtmin+3 38) sigrtmin+4 39) sigrtmin+5 40) sigrtmin+6 41) sigrtmin+7 42) sigrtmin+8 43) sigrtmin+9 44) 45) sigrtmin+11 46) sigrtmin+12 47) sigrtmin+13 48) sigrtmin+14 49) sigrtmin+15 50) sigrtmax-14 51) sigrmax-13 52) sigrtmax-12) sigrtmax-11 54) 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63)
Se nenhuma opção for passada para o matar
comando, por padrão, ele enviará um Sigterm
sinalize para o processo especificado, ao qual o último poderia reagir de várias maneiras: pode parar imediatamente, tentar fazer alguma limpeza antes de parar ou simplesmente ignorar o sinal.
Para especificar o sinal a ser enviado usando a matança, executamos o comando seguido de um traço e o número do sinal a ser enviado. Por exemplo para executar um Sigkill
sinalizamos que devemos executar:
Mate -9 pid
O Sigkill
sinal, ao contrário Sigterm
não pode ser capturado pelo processo, que não pode reagir: apenas será encerrado imediatamente.
Outro sinal que você costuma ver é Sigint
que é o sinal enviado na interrupção do teclado (CTRL-C). Ele também tenta encerrar o processo de uma maneira graciosa e pode ser ignorada pelo processo. Sigstop
e Sigcont
irá suspender e retomar respectivamente a execução de um processo: o primeiro, como Sigkill
não pode ser pego ou ignorado. Para uma lista completa e descrição dos sinais, você pode consultar o manual para sinal (7)
correndo:
Man 7 Signal
O Mate todos
o programa tem o mesmo objetivo de matar
, e como matar, envia um Sigterm
sinal quando nenhum outro é especificado (desta vez com o --sinal
opção), mas em vez de referenciar um processo por seu PID
, Ele fará isso pelo nome do comando, matando efetivamente todos os processos executados sob o mesmo.
Tutoriais do Linux relacionados:
- Coisas para instalar no Ubuntu 20.04
- Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
- Melhor ferramenta de monitoramento do sistema para Linux
- Ubuntu 20.04 Monitoramento do sistema com widgets conky
- Uma introdução à automação, ferramentas e técnicas do Linux
- Arquivos de configuração do Linux: os 30 primeiros mais importantes
- Otimização de desempenho do Linux: ferramentas e técnicas
- Ubuntu 22.04 Monitoramento do sistema com widgets conky
- Linux pode obter vírus? Explorando a vulnerabilidade do Linux…
- Download do Linux
- « Como gerar senha de palavra aleatória para carteira de bitcoin no sistema Linux
- Mantenha sua casa segura com backups de Cron »