Iniciando um processo Linux em segundo plano


10

Estou tentando criar um script que inicia alguns programas

startup.sh

knetworkmanager
emesene
keepassx

O problema é que, quando executo o script, ele inicia apenas o knetworkmanager. Isso ocorre porque ele será iniciado e espere até que termine. Como posso iniciar um programa sem esperar por ele? Eu não acho que posso apenas adicionar "&" após cada comando, porque todos os processos ainda serão eliminados quando o script for concluído.

Respostas:


16

Quando o shell que executa o script sai, ele envia um sinal HUP para os processos que você iniciou. Se eles não capturarem o sinal, eles terminarão. Portanto, se apenas usar & é suficiente depende do aplicativo. Para estar seguro, use nohup assim:

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

Veja as páginas de manual para nohup e kill para mais detalhes ou leia o artigo da wikipedia sobre nohup .


Lendo novamente, é ambíguo se o OP está saindo do shell de chamada ou não. Ele apenas menciona sair do script, não sair do shell ou do terminal.
— 23411 Adam Bellaire

Ao ler minha resposta novamente, você notará que eu disse "quando o shell que executa o script sai". Supondo que este shell tenha seu próprio terminal virtual (não um subshell ou algo assim), isso está correto.
— Kim

@ Kim: Isso é verdade. Sua resposta é boa, tenho certeza se o OP está fechando o shell de chamada ou não.
— 23411 Adam Bellaire

10

Não, os processos não devem ser eliminados quando o script terminar, se você usar &. Tente.

knetworkmanager &
emesene &
keepassx &

2

Com base nos exemplos de programas que você deu, parece que você está tentando iniciar alguns programas quando o KDE é iniciado. Nesse caso, dê uma olhada no recurso Autostart do KDE. Este artigo discute mais e fornece instruções sobre como adicionar programas à inicialização automática.


Na verdade, é isso que estou tentando fazer. Corrigi agora, obrigado.
— Bart van Heukelom

1

Como já foi dito, use o &operador para colocar um comando em segundo plano no momento em que o shell o executa.

Se você deseja que as peças do componente sejam executadas em ordem (e não de maneira simultânea), mas ainda deseja que o todo seja em segundo plano, use um subcasca como este:

(knetworkmanager; emesene; keepassx) &

ou, se você desejar que a operação de cada peça seja condicionada à conclusão bem-sucedida da peça anterior, use:

(knetworkmanager && emesene && keepassx) &

0

Adicionar um '&' após cada comando definitivamente funcionará. Isso significaria que esses scripts ou programas continuariam sendo executados mesmo após a conclusão do startup.sh.


0

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.