Caderno operacional — observar uma execução

Situação concreta

Um importador de ordens funciona quando o desenvolvedor o inicia, mas falha como tarefa agendada com “arquivo não encontrado”. Em vez de reinstalar ou executar como administrador, você vai construir uma miniatura segura desse problema e provar a causa. O laboratório usa arquivos fictícios e não precisa de ERP, contêiner ou acesso privilegiado.

Pré-requisitos, objetivos e materiais

Leia Do silício ao processo. Tenha Python 3, terminal e editor. No Windows, você usará Get-Process; em Linux/macOS, ps. Crie uma pasta vazia chamada laboratorio-execucao.

Você entregará observar.py, o arquivo gerado e relatorio.md. O relatório deve permitir que outra pessoa repita cada etapa.

Vocabulário operacional

  • Diretório atual é a pasta usada como ponto inicial para caminhos relativos.
  • Caminho absoluto identifica um local desde a raiz.
  • Handle ou descritor é a referência do processo a um recurso aberto.
  • Código de saída é um número devolvido ao encerrar; zero normalmente indica sucesso.
  • CPU-bound descreve trabalho limitado por cálculo.
  • I/O-bound descreve trabalho limitado por espera de entrada/saída.
  • JSON, JavaScript Object Notation, é um formato textual estruturado para trocar e armazenar dados.

Modelo mental e limite

Fluxo: Prever o resultado, Executar o programa, Observar processo e arquivo, Encerrar e comparar estados, Provocar uma falha segura, Registrar causa e correçãoPrever o resultadoExecutar o programaObservar processo earquivoEncerrar e compararestadosProvocar uma falhaseguraRegistrar causa ecorreção
Ler o fluxo em texto
  1. 1. Prever o resultado
  2. 2. Executar o programa
  3. 3. Observar processo e arquivo
  4. 4. Encerrar e comparar estados
  5. 5. Provocar uma falha segura
  6. 6. Registrar causa e correção

O laboratório mostra uma execução local. Em produção, agendadores, contêineres e serviços adicionam usuário, variáveis, volumes e limites. Não generalize tempos ou consumo medidos aqui para um servidor; transfira o método de observação.

Antes e agora

Um diagnóstico informal dizia “aqui funciona” e enviava uma captura de tela. Um diagnóstico reproduzível registra versão, diretório, comando, entrada, horário, saída e código de encerramento. Hoje, ambientes efêmeros tornam essa disciplina ainda mais importante: a instância pode desaparecer e levar evidências locais. IA pode explicar mensagens, mas precisa receber evidência sanitizada e não substitui a reprodução.

Passo 1 — crie o programa, bloco a bloco

Crie observar.py. O primeiro bloco identifica o processo:

from datetime import datetime, timezone
from pathlib import Path
import json
import os
import platform
import sys

saida = Path("estado") / "execucao.json"
print("PID:", os.getpid())
print("SO:", platform.system())
print("Python:", sys.version.split()[0])
print("Diretório atual:", Path.cwd())
print("Destino absoluto:", saida.resolve())

Cada valor responde a uma pergunta. PID localiza o processo; versão ajuda reprodução; diretório explica caminhos relativos; destino mostra onde o arquivo será criado.

O segundo bloco grava estado persistente:

saida.parent.mkdir(parents=True, exist_ok=True)
registro = {
    "pid_que_gravou": os.getpid(),
    "instante_utc": datetime.now(timezone.utc).isoformat(),
    "status": "laboratorio",
}

with saida.open("w", encoding="utf-8") as arquivo:
    json.dump(registro, arquivo, ensure_ascii=False, indent=2)

print("Tamanho:", saida.stat().st_size, "bytes")
input("Processo ativo. Pressione Enter para encerrar...")

mkdir cria a pasta. with garante fechamento. UTC evita confundir fusos. O arquivo contém somente dados fictícios.

Passo 2 — execute, encontre e encerre

No terminal, dentro de laboratorio-execucao, execute:

python observar.py

Antes de pressionar Enter, copie o PID. Em outro PowerShell:

Get-Process -Id 1234 | Select-Object Id, ProcessName, CPU, WorkingSet64

Substitua 1234. Em Linux/macOS, use:

ps -p 1234 -o pid,comm,%cpu,rss

Registre o comando e a saída. WorkingSet64 ou rss aproximam memória residente, mas uma única medição não demonstra vazamento. Volte ao programa e pressione Enter. Execute novamente o comando de processo: o PID não deve mais existir. Abra estado/execucao.json: o arquivo persiste. Escreva a distinção em suas palavras.

Passo 3 — mude o diretório de trabalho

Crie uma pasta vizinha chamada outra-pasta. A partir dela, execute o programa usando o caminho até o script, por exemplo:

python ../laboratorio-execucao/observar.py

No Windows, ajuste barras se necessário. Antes de executar, preveja o destino. Observe que estado nasce no diretório atual, não ao lado do script. Isso reproduz a causa comum de tarefas agendadas: o agendador inicia em outra pasta.

Uma correção possível é construir o caminho a partir do script:

base = Path(__file__).resolve().parent
saida = base / "estado" / "execucao.json"

Outra é configurar explicitamente o diretório no agendador. Escolha de acordo com o contrato: arquivo pertence à aplicação ou ao ambiente de execução?

Passo 4 — provoque falha de conteúdo

Depois que o programa encerrar, substitua o conteúdo do JSON por {invalido. Acrescente temporariamente:

with saida.open(encoding="utf-8") as arquivo:
    print(json.load(arquivo))

Execute e registre a exceção. O arquivo existe e a permissão pode estar correta; a falha pertence ao formato. Isso impede o diagnóstico vago “problema de arquivo”. Restaure o conteúdo válido depois.

Falha, diagnóstico e correção mínima

Para cada falha, preencha:

Campo Pergunta
Sintoma O que foi observado literalmente?
Esperado Qual resultado estava definido?
Evidência PID, caminho, comando e mensagem sustentam o quê?
Hipótese Qual causa explica todos os fatos?
Experimento Que mudança distingue essa causa das alternativas?
Correção Qual é a menor alteração adequada?

Não use “rodar como administrador” como correção de caminho ou formato. Elevar privilégio pode esconder uma permissão incorreta e ampliar impacto de um defeito.

Aplicação em manutenção/ERP

Um importador real pode ler arquivo exportado pelo ERP. Defina pasta de entrada, formato, codificação, limite, usuário executor, destino após sucesso e quarentena após falha. Grave um identificador de lote para impedir duplicação numa repetição. Se a aplicação roda em contêiner, confirme que a pasta é um volume persistente; o sistema de arquivos interno pode desaparecer.

O relatório deste laboratório vira uma pergunta operacional: “com qual usuário, diretório e configuração o job foi iniciado?”. Ela é mais útil que “por que no meu computador funciona?”.

Segurança e privacidade

Use somente registros fictícios. Não cole variáveis de ambiente, argumentos completos ou conteúdo do ERP no relatório. PIDs não são segredos duráveis, mas comandos podem conter tokens. Restrinja a pasta do laboratório ao usuário necessário e remova-a ao final se houver dados reais — neste exercício, não haverá.

Não provoque disco cheio, esgotamento de memória ou laços infinitos na máquina de trabalho. Falhas de capacidade exigem ambiente descartável e limites; ficam fora deste laboratório introdutório.

Exercício guiado

Acrescente ao registro um contador iniciado em zero e incrementado a cada execução, lendo o arquivo anterior se existir. Antes de codificar, responda: onde o contador vive? O que acontece se duas instâncias escreverem simultaneamente? O exercício mostra que persistência não garante consistência. Para produção, banco, transação ou lock apropriado seria necessário.

Desafio e evidência de competência

Entregue relatorio.md com:

  1. ambiente e versão;
  2. duas previsões feitas antes da execução;
  3. comandos e resultados;
  4. processo visível enquanto ativo e ausente após encerrar;
  5. arquivo presente após encerrar;
  6. comparação dos dois diretórios;
  7. falha de JSON e diagnóstico;
  8. recomendação para o job do ERP.

Critérios de aceite:

  • outra pessoa reproduz sem perguntar caminhos ocultos;
  • PID, diretório atual e destino absoluto estão registrados;
  • o texto distingue memória, processo e arquivo;
  • ao menos uma hipótese alternativa foi descartada;
  • nenhum dado sensível aparece;
  • a correção não amplia privilégios.

Conclusão

Você observou um programa tornar-se processo, persistir bytes e desaparecer da memória. Também provou que caminho depende do diretório atual e que “arquivo existe” não implica “conteúdo válido”. Esse pequeno repertório sustenta diagnósticos de jobs, APIs e contêineres. A competência demonstrada está no relatório reproduzível, não na quantidade de comandos executados.

Fontes oficiais

Teste de fixação

Comprove o que você aprendeu

Responda todas as questões. O gabarito comentado só aparece depois do envio.

1. O mesmo programa usa `dados/ordens.json` e encontra arquivos diferentes quando iniciado de duas pastas. O que o laboratório pretende demonstrar?
2. Ao provocar falha de permissão, qual registro permite que outra pessoa reproduza o diagnóstico sem elevar privilégios?
3. Após muitas repetições, o processo passa a falhar com “muitos arquivos abertos”. Qual experimento e correção atacam a causa?

Consulta universal

O que você quer encontrar?

Títulos, capítulos, conceitos, termos, laboratórios e ferramentas em uma única busca.

Digite pelo menos dois caracteres.