У меня есть сервер, который я хочу запустить (на одном HTTP-порту), а затем другой сценарий (который запускается (временно) на другой порт).
Я использую конвейер, чтобы они выполнялись одновременно, и скобки для группировки команд таким образом, чтобы спящий режим выполнялся первым (второй сценарий обращается к серверу, запущенному на первом, поэтому должно быть некоторое время для первого будет настроен).
Он работает нормально, при запуске сервера и после этого файл спящего режима и теста выполняется правильно, но процесс терминала не завершается автоматически после теста, как это происходит при простом запуске сценария.
npm run start-json-server | { sleep 1; node './test/index-cjs.js' ; }
Что мне нужно сделать, чтобы разрешить естественный выход (желательно, не пытаясь найти процесс и убить его)?
Обновление : я понял, что он все еще работает (да), потому что первый скрипт в качестве сервера не завершается ... Но есть ли способ заставить его завершить работу, опять же, желательно, не найдя его PID?
Канал не используется для запуска параллельных процессов. Он это делает, но в основном используется для настройки потока данных между двумя этапами конвейера.
Вместо конвейера используйте
npm run start-json-server &
server_pid="$!"
sleep 1
node./test/index-cjs.js
kill "$server_pid"
Это запустит первую команду в фоновом режиме. Тогда будет одна секундная задержка перед запуском второй команды. Когда вторая команда завершается, первая команда уничтожается.
PID самого последнего запущенного фонового процесса (процесс, запущенный с использованием &
в конце )доступен как "$!"
, и здесь мы используем этот факт для отслеживания PID первой команды.