Transcrição do áudio
É coleguinha, quando nós desenvolvemos sistemas e projetos, nós temos que seguir padrões. Em sistemas operacionais, nós temos um padrão muito interessante chamado padrão POSIX, ou seja, como que nós chamamos uma biblioteca, uma share de library, por exemplo, como que nós emitimos sinal de um processo para outro, tudo isso é definido nesse padrão. Bom, dentro desse padrão nós temos os sinais POSIX, e isso é importante, você tem que conhecer esses sinais, pelo menos alguns para uma prova, por exemplo, de certificação. Tá bom? Então, vamos lá. São usados para notificar processos e threads, esses sinais, naturalmente, de possíveis eventos, do tipo, olha só, o usuário fechou a tela, isso é um evento. Por exemplo, o usuário, naturalmente, ele terminou a sessão, isso é um evento, o usuário pressionou contra o ceno teclado, isso é um evento. Então nós capturamos esse evento nos sistemas. Então funciona basicamente assim, um processo, então ele é capaz de emitir um sinal, e esse outro processo então ele é capaz de processar esse sinal, e por exemplo, no caso do SIGTERME, esse dois poderia ser voluntariamente o saio de execução. Assim, como assim? No livro do TANEMBOL, vocês leram na parte de processo que um processo ele termina de algumas formas. Uma delas é saída voluntária, a outra é, por exemplo, erro de CRECH, do ambiente computador, e a outra é erro do programa, beleza? Mas no caso aqui nós estamos falando de saída voluntária, SIGTERME. Bom, quando você desliga a sua máquina, o que acontece? É disparado pelo seu sinal para todos os processos pedindo para que eles terminem. Então voluntariamente os processos finalizam as suas execuções e saem, eles não evitem. Vimos aqui então, exite como uma função para sair do programa. Então eles executam e exitam e vão sair. E aos poucos deles vão saindo, por isso que naturalmente a máquina demora para desligar, beleza? Então, de repente, bloquinhos de notas, você não salvou bloquinhos de notas, não é isso? E mandou desligar seu sistema operacional. E o sistema operacional não desliga, ele aguarda bloquinhos de notas. Aqui, alguns desses sinais naturalmente, na verdade só um que não pode ser bloqueado, todos os outros podem ser bloqueados pelo processo, como assim? Eu mando sinal e em dois eu posso aceitar ou não? Somente um, não tem esse dois. Eu mando sinal e foda-se, derruba, que é o Q. O Q realmente derruba tudo, mas o computador não dá Q nos processos quando você desliga. Ele dá um sigterm pedindo para finalizar a execução. Então os programas saem. Quando você força a finalização dos programas, você não envia o sigterm, você envia o signal Q. E o processo não faz a tratativa. E o que acontece? No nada, ele fecha tudo, mal fechado e pode dar corrupção de arquivos que pode levar a Cresc em uma inicialização futura. Por isso que nós evitamos o Q. O Q não é legal, está aqui o sigq aqui. O que você tem que saber para uma prova de certificação? Com certeza você tem que saber o R. Imagine que você abriu um terminal, você abre um terminal, remoto e você executa um programa. Aí cai a conexão. Aí você abriu outro terminal e executa o programa de novo. Aí cai. Aí você abre o terminal de novo e executa o programa de novo. Se os programas continuassem a ser executados após a queda do terminal, não daria mais para controlar nada. Então por um motivo de segurança do próprio ambiente e do próprio usuário, quando você cai a conexão de um terminal remoto ou quando você fecha, o sistema ele lança para todos os processos que foram abertos naquela sessão, um sig-hub. E aí, naturalmente, o processo sig-hub é um daqueles que o processo pode ignorar. Não, é normal ele ignorar. Então ele sai de execução. Imagine uma backup. Você faz a backup, está acontecendo a backup, cai, você entra, faz a backup de novo. Aí tem duas backups acontecendo em paralelo. Aí cai de novo. Aí você entra, faz o backup de novo. Faz backup em paralelo. Então por isso que o sig-hub é um sinal emitido, quando essa sessão é finalizada desse terminal. O seguinte é quando você dá um control C. Então você está aqui rodando um ping, um ping eterno no Linux e aí você pum, control C, e aí ele para. Então você emite um sinal de sig-hub, sinal número 2. Mas também tem que saber esse cara. O sig-hub, o que acontece? O sig-hub é um sinal de ignorância máxima. Significa que o processo imediatamente para de executar. O processo nem tem o que fazer. Ele simplesmente sai de execução. É o 9. O 3 é quando ele executa um kit. Lá do keyboard, finalização pelos botões do keyboard. Stop ele para o processo, o 19. Aquele para. É um tipo de stop de terminal que você dá. SIG-Term é quando você perde a finalização, você manda um sinal de olha. Desliga e sai de forma voluntária. E o continue. E é quando você está parado e decide continuar. Você emite o 20 e dá uma pausa no processo. E você emite o 18 e volta a executar o processo. Nesse exato momento ele sai da lista de bloqueado e vai para pronto em execução. Não sei se vocês lembram do Thunderbolt, sistema de operacionais modernos. Ele coloca lá. Pronto. Em execução e bloqueados. Então vamos lá. Então se você pressionar aqui o espaço traço L, você vai ver todos os números de todos os sinais possíveis. Não precisa conhecer todos eles. Mas alguns são importantes. O CUTR-C é o seguinte. O CUTR-BARRA é o kit. Alguns teclados chegaram a ter esse botão aqui. Alguns teclados chegaram a ter esse botão mas desnecessários. Quando você quer dar uma pausa no processo é control D. Por isso que quando você está no nano e aí você dá um control D e volta para o terminal. Aí depois ele não deixa mais você editar o arquivo. Porque o arquivo está em edição por um processo que está bloqueado. Então vamos lá. O processo que está com o arquivo está bloqueado. Então ele não pode terminar nunca. Para evitar um deadlock, o sistema operacional evita que um novo processo precise desse arquivo que está na mão de um outro processo que está bloqueado e não vai terminar nunca. Então esse processo entra aí em deadlock também. E isso seria uma grande merda. Como que você emite um evento desse? Por incrível que pareça, eu odeio esse comando Q. Porque o Q você consegue emitir todos os finais com o Q. Ou seja, você conseguiria usar esses números todinhos com o comando Q. Mas Q é matar, porra. Mas matar e você vai simplesmente executar o 18. Cadê o 18? Deixa eu achar o 18 aqui. Aí você vai emitir o continue18 com Q. Você entende? O nome do comando deve ser signal. Signal o número e o process ID. E como você sabe do process ID? Então vamos lá. É escroto pra caramba. Vamos lá. Deixa eu meter essa fonte aqui. Então você simplesmente... Eu vou fazer o seguinte. Vou abrir um processo aqui. Vou com um processo aberto, o Python Trades. Ele está aqui no modo interativo. Gente, olá galera. É isso. E esse é o modo interativo do Python, certo? Está no modo interativo. Então eu posso PSLX. Então eu vou passar por esse comando ainda com vocês mais pra frente. Basicamente ele vai listar os processos e algumas características do processo. E aí então atualmente ele vai me trazer uma lista gigantesca. Eu não quero essa lista gigantesca, certo? Eu não quero procurar aqui dentro o Python. Então como que você faz? E aí você usa pipe. Vimos arquivos especiais. Então o que vai acontecer? O PSLX vai criar um arquivo especial do tipo pipe na memória e vai injretar no grep. O grep faz filtro. Então funciona assim cara, olha só que look, hein? O PS, a saída dele, o output, eu vou falar disso no capítulo de processos. Acho que a gente empacou também, até agora sim. Mais pra frente. O PS, eles geram arquivo na memória do tipo pipe com o output do PS. E esse arquivo ele é injretado na criação de um novo processo chamado grep. Então que saiu do PS ele é injretado no grep. É injretado mesmo na memória. E então o grep filtra. Legal? Então nós temos aqui, nós temos um monte de coisa em Python rodando aqui, certo? Esse aqui é do Qubes, meu samba operacional. Esse aqui é do controle de printers. É isso mesmo, não tem impressão da minha rede, pô. Eu vou matar esse processo, vou achar esse filha da Ego e vou matar esse processo. Beleza? Vou eliminar esse cara aqui. Esse cara pode ser um risco pra minha infraestrutura. Aqui eu estou usando o comando o Python 3 aqui, ó. Esse cara aqui. E esse outro aqui, esse cara aqui, pra extensão, esse cara aqui é esse cara aqui. Esse próprio comando aqui, tá? Beleza, então quer dizer que esse aqui, esse é o cara que eu quero eliminar, beleza? Então sudoqiu, tá? Traço 9, opa, traço 9, qiu é dado com comando sudo, beleza? E aí, então eu uso o 15, meio a 1. Como eu executei o 9, tá? Não foi 1, é, então ele vai simplesmente finalizar e foda-se, lándia cara, foda-se, lándia. Viu, já não tá mais daqui. Beleza? Lógico. Do momento em que eu executo qiu, até o momento em que eu executo o ps, pode naturalmente o processo tá em fase de exclusão e ele aparecer. É muito rápido, é coisa de milissegundo, mas eu não vou garantir pra você que vai ser, naturalmente, assim tão, tão imediato, ok? Você pode dar o rap 1, conforme eu falei, o 15, ou o 15 ou o 9, beleza? Vai depender. E aí, nós temos alguns, o primeiro processo tem que existir, o número tem que existir, o qiu tem que ser executado como superusuário, lógico, por si, tá matando o processo. E aqui o que eu fiz no terminal, matando o tal do gadget, é o outro processo, o reply tom aqui, que eu achei mais fácil. Por que esse grab aqui? Grab, big wrap. Então vamos lá, vou mostrar pra vocês. Cadê? Legal. Vamos executar de novo o processo, veja que ele já morreu, né? Repare que ele até falou que ele recebeu o sinal de execução de morte. Legal. Vamos lá. Veja, quando ele executa esse comando, conforme eu falei esses aqui são inscripsos normais do meu sistema operacional, esse aqui é o... essa tela aqui, né? E aqui eu falei que era isso aqui, beleza? Por que? Tá vendo essa palavra, é Python aqui no grab? Adivinha. Ela também é uma execução. Então ela pega ela mesmo. Esse comando pega ele mesmo. Então como que você faz para evitar que esse comando pegue ele mesmo? Então você filtra de modo que fala assim, não, não quero que exibam isso. Então vamos lá. E... Legal, pera aí. Aqui, ó. Então o PS ele pega o output dele e injeta na memória num arquivo que vai ser injetado no grab. Legal? O grab ele vai filtrar tudo que tem Python, que é o que você está vendo aqui em cima. E aí você vir e fala assim, tch. Pega o output do grab, gere um outro arquivo, pipe, na memória e injeta no próximo grab. Sabe o próximo grab? Eu vou pedir que negue o traço v negue a palavra Python. Desculpe, é grab. Veja, eu vou pedir que negue grab. Então injeta, pega todos os processos, injeta na memória do grab esse grab que filtra essa lista de Python, mas que depois injeta no segundo grab pedindo para que não coloque o que tiver grab. E aí você então traz uma lista bem mais limpa, bem mais limpa, tá? Beleza? E aqui eu mostrei a questão do que eu executei com vocês agora em um pouco, beleza? Bom, às vezes é comum, é como você pedir que o processo ele saia de forma voluntária. Então o 9 ele pode ser muito agressivo, você pode usar o 1, preste atenção. E o, é um dos pontos comandos que recebe assim, tá? Traço um número, porque esse traço não é traço de parâmetro, é um dos poucos comandos que recebe o 9, o 1, o 15, assim, direto, sabe? Esse cara parece um L às vezes, parece um L. Muitos alunos erram, né? Acredito que isso aqui é um L. Não, cara, é o PSF, Grab Python, não precisaria da aspa simples. Grab, ver para você remover o grab. O que é o WK, cara? A WK ele é um... Ele é o Scripting Linha. Mas vamos ter um capítulo de scripts, pare, deixa eu mandar uma mensagem para um colega. Ele é um Scripting Linha, tá? Então você consegue construir scripts enormes aqui nessa linha, aqui dentro. Já brincou de competição de quem programa em linha. É proibido fazer duas linhas, só pode uma linha. E os caras fazem sistemas inteiros com tela, tudo. O que seria sentendo as linhas, esses caras fazem uma única linha? A WK é bem parecida, só que com scripts, tá? Então por isso que sempre quando você vai dar a WK, é o mínimo do mínimo do mínimo. É um pente, é um if no máximo. Cara, mas dá para você fazer scripts gigantescos nessa linha aí, beleza? É próprio para terminar. Meu livro não contempla isso atualmente. Mas até eu gravar esses vídeos e eu vou chegar lá e eu vou colocar isso aí. Ou se no futuro eu posso criar um vídeo a parte sobre a WK. Vamos lá. O Xarg ele pega e ele vai fazer um laço de repetição com o que estiver aqui na frente. E aí ele vai fazer um laço de repetição com o que estiver aqui. Beleza? O que ele vai fazer? Imagine que ele vai fazer o seguinte. Aqui no final ele vai pegar todos os colunas 2 e vai injetar aqui. O que é o coluna 2? Vamos dar uma olhada no nosso terminal. Coluna 1, coluna 2, é o PND. O cara usou a WK só para filtrar isso aqui. Vamos lá. A WK, aí nós vamos executar o script aqui. Ah, simples, print 2. Eu acho que é cifrão 2, cara. Cifrão 2, exatamente. Também ferrojado, também ferrojado a WK. Muito ferrojado mesmo. Engraçado que é a segunda vez que cifrão, cifrão, cifrão. Esse aqui é o cifrão. Então repare, ele vai colocar a segunda coluna aqui, gente. A segunda coluna, tá vendo? Então imagine que agora ele pega esses dados aqui como um laço de repetição e jogue lá no Xarg. Olha só, no Xarg eles jogam aqui no final. Então vai ficar Q9, Q9, Q9, vamos voltar lá. Q9, 11, 97, Q9, 12, 18, Q9, 15, 34, Q9, 15, 81. Beleza? Peraí, dá um mensagem com o colero. É, isso é um tipo de laço de repetição, tá? Você também pode pedir para dar um QAL em tudo que é... Ah, então, por exemplo, eu vou fazer isso porque vai afundar os scripts aqui do meu Qubes do meu sistema operacional. E o AL de todos os usuários, os Elinox. Então você dá um Q em todos os processos do cara, você derruba tudo, tá? Do Guedit, Pequil, você pode estar executando um comando sobre o Proxxas que tem esse nome, só que você tem que acertar o nome. Tem que acertar o nome. Um Pequil, 9, dos processos do usuário que se chamam Guedit. Tem que acertar o nome. Beleza? Tá bom. E nós temos aqui a parte de tratativa de sinais. Beleza? Vamos para o nosso próximo vídeo. Até mais, tchau!