Почему процесс не завершается и как его завершить

У меня есть сервер, который я хочу запустить (на одном HTTP-порту), а затем другой сценарий (который запускается (временно) на другой порт).

Я использую конвейер, чтобы они выполнялись одновременно, и скобки для группировки команд таким образом, чтобы спящий режим выполнялся первым (второй сценарий обращается к серверу, запущенному на первом, поэтому должно быть некоторое время для первого будет настроен).

Он работает нормально, при запуске сервера и после этого файл спящего режима и теста выполняется правильно, но процесс терминала не завершается автоматически после теста, как это происходит при простом запуске сценария.

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

Что мне нужно сделать, чтобы разрешить естественный выход (желательно, не пытаясь найти процесс и убить его)?

Обновление : я понял, что он все еще работает (да), потому что первый скрипт в качестве сервера не завершается ... Но есть ли способ заставить его завершить работу, опять же, желательно, не найдя его PID?

0
01.10.2018, 09:06
1 ответ

Канал не используется для запуска параллельных процессов. Он это делает, но в основном используется для настройки потока данных между двумя этапами конвейера.

Вместо конвейера используйте

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

sleep 1

node./test/index-cjs.js

kill "$server_pid"

Это запустит первую команду в фоновом режиме. Тогда будет одна секундная задержка перед запуском второй команды. Когда вторая команда завершается, первая команда уничтожается.

PID самого последнего запущенного фонового процесса (процесс, запущенный с использованием &в конце )доступен как "$!", и здесь мы используем этот факт для отслеживания PID первой команды.

1
28.01.2020, 02:42

Теги

Похожие вопросы