bash 스크립트로 시작된 중간자 서버를 종료하시겠습니까?

bash 스크립트로 시작된 중간자 서버를 종료하시겠습니까?

다음과 같은 bash 스크립트가 있습니다.

bundle exec middleman server & node script.js && 
kill -9 $(lsof -i:4567 -t) &&
bundle exec middleman build --verbose

이제 번들 exec 중간자 서버를 종료하는 방법은 포트(localhost:4567)를 기반으로 종료하는 것입니다. 그러나 포트를 변경해야 하는 경우에는 이는 좋지 않습니다.

Node script.js를 실행한 후 Bundle exec man-in-the-middle 서버를 종료하는 가장 좋은 방법은 무엇입니까? (기본적으로 서버가 온라인 상태가 될 때까지 기다리고 get 요청을 보내고 반환된 서버 데이터에 대해 일부 작업을 수행합니다.) 포트에 의존하지 않는 작업을 수행하고 싶습니다. 이름이나 두 번째로 최근에 실행된 항목(또는 가장 최근에 실행 중인 서버?)으로 종료하고 싶습니다.

매우 감사합니다!

답변1

셸에 따라 백그라운드 작업을 쉽게 종료할 수 있습니다. 백그라운드에서 실행 중인 다른 항목이 없으면 작업 1이 되므로 다음을 수행할 수 있습니다 kill %1.

sauer@host:~$ set -b
sauer@host:~$ sleep 10 & echo hello
[1] 18988
hello
sauer@host:~$ kill %1
[1]+  Terminated              sleep 10

백그라운드에서 다른 작업이 진행 중인 경우 수행할 수 있는 몇 가지 작업이 있습니다. Bash 또는 셸이 유사하게 작동한다고 가정하면 jobs -r실행 중인 작업 목록을 가져오고 작업 번호를 파악하거나 숫자 대신 작업 사양에 프로세스 이름(백분율 뒤에 오는 내용)을 지정할 수 있습니다. 아마도 kill %bundle. 또는 이 경우 가장 유용한 것은 %+가장 최근의 백그라운드 작업을 참조하는 데 사용할 수 있다는 것입니다.

sauer@host:~$ set -b
sauer@host:~$ sleep 10 & sleep 11 & echo hello
[1] 19406
[2] 19407
hello
sauer@host:~$ kill %+
[2]+  Terminated              sleep 11

백그라운드에서 두 개의 휴면 프로세스가 실행되고 있지만 이는 %+"가장 최근" 프로세스이므로 종료됩니다. set -b다음 프롬프트를 기다리지 않고 백그라운드 작업 상태에 대한 즉각적인 피드백을 제공 할 수도 있습니다. 이는 단지 예일 뿐입니다. :)

아, 그리고 여기에 이름으로 백그라운드 작업을 종료하는 방법과 테마가 있으므로 패턴이 여러 프로세스와 일치하는 경우 어떤 일이 발생하는지 보여주는 유용한 예가 있습니다. "jobs" 출력에는 +최신 작업과 두 번째로 최근 작업에 대한 합계 표시기가 표시되며, 이는 작업 사양에서 약칭으로 사용될 수 있습니다.-

sauer@host:~$ sleep 10 & sleep 11 & sleep 9 & echo hello
[1] 22255
[2] 22256
[3] 22257
hello
sauer@host:~$ jobs
[1]   Running                 sleep 10 &
[2]-  Running                 sleep 11 &
[3]+  Running                 sleep 9 &
sauer@host:~$ kill %sleep
-bash: kill: sleep: ambiguous job spec
sauer@host:~$ kill %"sleep 10"
[1]   Terminated              sleep 10

관련 정보