Configure o ID do processo pai a partir do ShellScript, mate todos os Processos secundários mais tarde

1

Eu quero escrever um script de shell para minha máquina Ubuntu, que inicia alguns aplicativos de servidor. Eu preciso deste script para executá-lo do meu aplicativo java. Mas preciso de uma maneira fácil de agrupar todos esses processos do servidor, para poder eliminar todos os processos do servidor do meu aplicativo Java mais tarde.

Minha idéia é definir o id do processo pai a partir do meu script de shell e matá-lo em um momento posterior com o comando pkill .

Como posso fazer tudo isso a partir de um script de shell?

    
por flxh 15.09.2015 / 13:29

3 respostas

1

Você pode executar instâncias do Appium Server anotando seu PID, que você pode usar em um ponto posterior para matar. por exemplo.

Appium_server_1 & instance1=$!
Appium_server_2 & instance2=$!
Appium_server_3 & instance3=$!
.
.
.

e depois você pode matar todas as variáveis instâncias com o comando kill .

    
por 15.09.2015 / 13:47
1

Se o seu shell suportar a variável PPID incorporada, você poderá usar essa variável caso esteja realmente interessado no PID do processo que chamou o shell.

Se você está interessado no PID desse shell e gostaria de fornecê-lo a outras pessoas, use $$ .

    
por 15.09.2015 / 13:45
1

Se eu entendi sua pergunta corretamente, a resposta é que você não pode fazer isso. O programa java inicia, chama um script de shell que inicia mais processos. Em seguida, o script de shell termina e você deseja que o controle seja passado para o processo java, que deve ser capaz de encerrar todos os outros processos.

A resposta curta é que você não pode fazer isso. Quando o script de shell morre, todos os processos iniciados por ele são propriedade do processo número 1 (init) e não do processo java.

Existe uma razão pela qual você está usando o script de shell para iniciar os processos extras?

Por que não apenas usar o java para iniciar todos os processos (usando as bibliotecas do Process), ou usar algo como o supervisord ( link ). Você pode controlar o supervisord para iniciar / parar processos a partir do programa java.

Se todos os processos são nomeados da mesma forma, você também deve poder usar o comando killall para matá-los pelo nome.

    
por 15.09.2015 / 13:47