Este programa requer um sistema capaz de marcar processos. Não será executado de maneira confiável (ou de todo) em um ambiente puramente interpretado, como o console JavaScript de um navegador da Web. Ele foi projetado para sistemas semelhantes a Unix (Linux, MacOS).
Este programa usa o `OS.Fork ()` do Python para criação de processos. Lembre -se de que criar um grande número de processos pode sobrecarregar seu sistema. Teste com pequenos valores de `n` primeiro.
`` `Python
OS de importação
Importar sistemas
def create_binary_tree (profundidade, nível =0):
"" "
Cria recursivamente uma árvore binária de processos.
Args:
Profundidade:a profundidade desejada da árvore.
Nível:o nível atual na árvore (começa em 0).
"" "
Se nível
print (f "Process {os.getpid ()} no nível {nível}") # Imprima o ID do processo e o nível
# Criar filho esquerdo
pid_left =os.fork ()
Se pid_left ==0:# Processo infantil
create_binary_tree (profundidade, nível + 1)
OS._EXIT (0) # IMPORTANTE:Saia do processo infantil para evitar recursão infinita
# Crie filho certo
pid_right =os.fork ()
Se pid_right ==0:# Processo infantil
create_binary_tree (profundidade, nível + 1)
OS._EXIT (0) # IMPORTANTE:Saia do processo infantil para evitar recursão infinita
# Processo dos pais espera que as crianças terminem (opcional, mas boa prática)
os.waitpid (pid_left, 0)
os.waitpid (pid_right, 0)
Se __name__ =="__main__":
Se Len (sys.argv)! =2:
Print ("Uso:Python binary_tree.py ")
sys.exit (1)
tentar:
profundidade =int (sys.argv [1])
Se profundidade <0:
impressão ("A profundidade deve ser um número inteiro não negativo.")
sys.exit (1)
create_binary_tree (profundidade)
Exceto ValueError:
Imprima ("Valor da profundidade inválida. Digite um número inteiro.")
sys.exit (1)
`` `
Como correr:
1. Salvar: Salve o código como `binário_tree.py`.
2. Corra da linha de comando: `python binary_tree.py ` onde `` é a profundidade desejada da árvore (por exemplo, `python binary_tree.py 3`).
Considerações importantes:
* Manuseio de erro: O código inclui manuseio básico de erro para argumentos de linha de comando inválidos.
* Terminação do processo: As chamadas `OS._Exit (0)` são cruciais. Sem eles, cada processo filho criaria recursivamente mais processos, levando a uma explosão não controlada de processos.
* Uso do recurso: Esteja atento ao crescimento exponencial dos processos. Uma profundidade de 4 já criará muitos processos. Uma profundidade de 10 provavelmente travará seu sistema.
* Gerenciamento de processos: As chamadas `os.waitpid ()` são opcionais, mas recomendadas para melhor gerenciamento de processos. Eles garantem que o processo dos pais aguarde que seus filhos terminem antes de sair. Sem eles, seu processo pai pode terminar antes que alguns processos infantis tenham concluído.
* Limitações do sistema operacional: O número máximo de processos que você pode criar é limitado pelo seu sistema operacional.
Esta versão aprimorada fornece melhor manuseio de erros e gerenciamento de processos, tornando -o mais seguro e mais robusto. Lembre -se de sempre começar com pequenos valores de `n` para testar e entender o comportamento antes de tentar valores maiores.