Como posso executar um processo em uma janela de terminal e depois ocultar essa janela?

3

Eu quero executar python ~/program/proxy.py em um terminal quando inicializo. E então esconda esta janela de terminal (porque é apenas um programa proxy, e eu não quero ver a informação de depuração). Então, como posso fazê-lo funcionar?

    
por ufo22940268 31.07.2011 / 09:08

5 respostas

5

IMHO, a solução ideal é executar esse proxy como daemon do sistema.

Este tutorial do Novel deve ensinar conceitos básicos. Infelizmente é um pouco centrado no SuSE, em outras distribuições os detalhes podem ser ligeiramente diferentes. Use-o como ponto de partida.

P.S. Há algo estranho em sua pergunta, um serviço iniciado na inicialização não tem uma janela de terminal. Um programa iniciado quando você faz logon pode ter uma janela de terminal. Talvez você tenha o recurso de login automático ativado, portanto, você está confundindo o processo de inicialização com o processo de login.

    
por 31.07.2011 / 12:40
4

Uma abordagem mais difícil é escrever um script simples que envolva seu programa e desconecte-o de seu terminal. Algo como:

#!/bin/bash

nohup python ~/program/proxy.py > ~/.proxy.log 2>&1 &

Depois, você pode colocá-lo na sua sequência de inicialização automática de login (como você, provavelmente, já fez).

    
por 31.07.2011 / 12:48
4

Usando tmux , você pode iniciar um processo desanexado, que é efetivamente "oculto", e anexá-lo para verificar seu status, como e quando quiser. Se você iniciá-lo a partir de um terminal, você pode até mesmo fechar essa sessão de terminal e, posteriormente, anexar ao seu processo python tmux de outro terminal ...

Este exemplo usa watch como o comando para executar, mas apenas substitui seu comando python ... Ele inicia a sessão do tmux em um estado já detectado.

tmux new -d 'watch -n 1 -d date'

Para visualizar o estado atual da sessão "oculta" (desanexada), basta digitar tmux attach em uma janela do Terminal ...

Você também pode usar screen , mas acredito que tmux pode ser a melhor escolha, com base nos comentários deste Unix- & -Linux responder ...

    
por 31.07.2011 / 15:47
1

Para fornecer uma resposta literal à sua pergunta, você pode usar um programa como AllTray * . Você poderia então passar um comando para iniciar um terminal e passar um comando para esse terminal para executar seu programa. Se você disser ao AllTray para ocultar o terminal, ele será incorporado na bandeja do sistema, pronto para ser exibido se você precisar visualizar a saída.

No entanto , recomendo que você vá com resposta de andcoz e executa este programa como um daemon do sistema. Ter a saída ir para um arquivo de log. A única maneira que não funcionaria é se fosse um programa interativo, mas pelo que parece, não estamos falando de um programa interativo.

* Disclaimer: Eu sou o mantenedor do AllTray

    
por 01.08.2011 / 03:08
0

Dependendo de quão cedo a inicialização você quer que isso seja executado, você pode querer usar o cron @reboot.

(Você pode precisar brincar com variáveis ambientais.)

Em seguida, envolva-o em um terminal separado.

tmux new -d '/path/to/python /full/path/program/proxy.py'
# or #
screen -d -m '/path/to/python /full/path/program/proxy.py'

Efetivamente, estes são baseados em terminais sintéticos.

Isso é comumente feito para o processo do servidor "mickey mouse" como "sinatra" ou "minecraft" ou até mesmo "desdobramento sem cabeça em casa".

Para limpeza / controle, você pode querer usar um script de shell para finalizar o lançamento e invocar aquele do cron.

    
por 20.05.2015 / 01:05