Iniciando um processo linux em segundo plano

10

Estou tentando criar um script que inicie alguns programas

startup.sh

knetworkmanager
emesene
keepassx

O problema é que quando executo o script, ele só inicia o knetworkmanager. Isto é porque vai começar, então espere até que esteja terminado. Como posso iniciar um programa sem esperar por ele? Eu não acho que posso adicionar "&" depois de cada comando, porque todos os processos ainda serão mortos quando o script terminar.

    
por Bart van Heukelom 09.09.2009 / 19:41

6 respostas

14

Quando o shell que executa o script sai, ele envia um sinal HUP para os processos iniciados. Se aqueles não pegarem o sinal, eles terminarão. Então, seja usando apenas & é suficiente depende da aplicação. Para ser seguro, use nohup assim:

nohup your-program >>/dev/null 2>>/dev/null &

Veja as man pages de nohup e kill para mais detalhes ou leia o artigo da wikipedia sobre nohup .

    
por 09.09.2009 / 20:10
10

Não, os processos não devem ser eliminados quando o script for concluído se você usar & . Experimente.

knetworkmanager &
emesene &
keepassx &
    
por 09.09.2009 / 19:49
2

Baseado nos programas de exemplo que você deu, parece que você está tentando iniciar alguns programas quando o KDE é iniciado. Se assim for, dê uma olhada no recurso Autostart do KDE. Este artigo discute mais e fornece instruções sobre como adicionar programas para iniciar automaticamente.

    
por 09.09.2009 / 20:48
1

Como outros já disseram, use o operador & para colocar um comando no plano de fundo no momento em que ele é executado.

Se você quiser que as partes do componente sejam executadas em ordem (em vez de de forma concisa), mas ainda assim desejar que o todo seja em segundo plano, use um sub-shell como este:

(knetworkmanager; emesene; keepassx) &

ou, se você quiser que a operação de cada parte seja condicionada à conclusão bem-sucedida do uso da parte anterior:

(knetworkmanager && emesene && keepassx) &
    
por 09.09.2009 / 20:10
0

Adicionando um '&' depois de cada comando definitivamente funcionará. Isso significaria que esses scripts ou programas continuariam a ser executados mesmo após o startup.sh terminar.

    
por 09.09.2009 / 19:59
0

Outra opção seria iniciar o processo como um daemon, usando / sbin / start-stop-daemon

    
por 09.09.2009 / 20:33