하나의 HTTP 포트에서 실행하려는 서버와 다른 포트에서 (임시로) 실행되는 또 다른 스크립트가 있습니다.
파이프를 사용하여 동시에 실행되도록 하고, 대괄호를 사용하여 명령을 그룹화하여 sleep이 먼저 발생하도록 했습니다(두 번째 스크립트는 첫 번째 스크립트에서 시작된 서버에 액세스하므로 첫 번째 스크립트를 설정하는 데 시간이 걸립니다).
제대로 작동하고 서버가 시작되고 잠자기 상태가 된 후 테스트 파일이 올바르게 실행되지만 스크립트가 방금 실행되었을 때처럼 테스트 후에 터미널 프로세스가 자동으로 종료되지 않습니다.
npm run start-json-server | { sleep 1; node './test/index-cjs.js' ; }
자연스러운 종료를 허용하려면(가급적이면 프로세스를 찾아 종료하는 수고를 겪지 않고) 어떻게 해야 합니까?
고쳐 쓰다:서버인 첫 번째 스크립트가 종료되지 않기 때문에 아직 실행 중이라는 것을 알고 있습니다. 하지만 PID를 찾지 않고 다시 종료할 수 있는 방법이 있습니까?
답변1
파이프는 동시 프로세스를 시작하는 데 사용되지 않습니다. 그렇게 하기는 하지만 주로 파이프라인의 두 단계 사이에 데이터 흐름을 설정하는 데 사용됩니다.
파이프 대신
npm run start-json-server &
server_pid="$!"
sleep 1
node ./test/index-cjs.js
kill "$server_pid"
그러면 백그라운드에서 첫 번째 명령이 시작됩니다. 그런 다음 두 번째 명령이 시작되기 전에 1초의 지연이 있습니다. 두 번째 명령이 완료되면 첫 번째 명령이 종료됩니다.
가장 최근에 시작된 백그라운드 프로세스의 PID( &
끝에서 시작된 프로세스를 사용하여)를 사용할 수 있습니다 "$!"
. 여기서는 해당 사실을 사용하여 첫 번째 명령의 PID를 추적합니다.