Por que o processo não está saindo e como obtê-lo para sair

0

Eu tenho um servidor que quero executar (em uma porta HTTP) e, em seguida, outro script (que é executado (temporariamente) em outra porta).

Estou usando um pipe para permitir que eles sejam executados simultaneamente e colchetes para agrupar os comandos de modo que ocorra primeiro o sono (o segundo script acessa o servidor iniciado no primeiro, portanto, é necessário que haja algum tempo para o primeiro para ser configurado).

Funciona bem, com o servidor sendo iniciado e o arquivo de teste e de suspensão sendo executado corretamente depois disso, mas o processo do terminal não sai automaticamente após o teste, como acontece ao executar o script.

npm run start-json-server | { sleep 1; node './test/index-cjs.js' ; }

O que eu preciso fazer para permitir uma saída natural (de preferência sem passar pelo problema de encontrar o processo e matá-lo)?

Atualização : percebi que ainda estava em execução (duh) porque o primeiro script, como um servidor, não é encerrado ... Mas há uma maneira de terminá-lo, novamente , preferencialmente sem encontrar seu PID?

    
por Brett Zamir 01.10.2018 / 07:57

1 resposta

1

Um pipe não é usado para iniciar processos simultâneos. Ele faz isso, mas é usado principalmente para configurar um fluxo de dados entre dois estágios de um pipeline.

Em vez do seu pipeline, use

npm run start-json-server &
server_pid="$!"

sleep 1

node ./test/index-cjs.js

kill "$server_pid"

Isso iniciaria o primeiro comando em segundo plano. Haveria então um atraso de um segundo antes do início do segundo comando. Quando o segundo comando termina, o primeiro comando é eliminado.

O PID do processo de segundo plano iniciado mais recentemente (um processo iniciado usando & no final dele) está disponível como "$!" e aqui usamos esse fato para rastrear os PIDs do primeiro comando .

    
por 01.10.2018 / 09:14

Tags