두 번째 종료하자마자 첫 번째 명령을 종료하십시오.

두 번째 종료하자마자 첫 번째 명령을 종료하십시오.

저는 오랫동안 이 시나리오에 대한 모범 사례를 찾고 있었습니다.

미리 실행 중인 process1에 의존하는 process2가 있는 경우. 다음과 같은 별칭을 설정했습니다.

alias both='process1 & process2'

그런 다음 process2가 종료되면 process1도 종료되고 싶습니다(현재 솔루션은 터미널로 돌아가는 것입니다 kill %%).

예를 들어(USB를 통해 Mac에서 iOS 장치에 연결하려면):

alias usbssh='/usr/local/bin/iproxy 2222 22 & ssh -p 2222 root@localhost'

어떻게 계속 iproxy달리다가 종료되자마자 죽이나요 ssh?

답변1

kill $!끝에 추가하십시오 .process1 & process2; kill $!

$!변수(Bash에서는 "매개변수"로 혼동하기 쉽게 알려짐)이며,확장하다어디에서나 마지막 배경 PID로:

비동기 명령으로 실행되거나 bg 내장 기능을 사용하여 가장 최근에 백그라운드에 배치된 작업의 프로세스 ID로 확장됩니다(아래 JOB 제어 참조).

%%fg는 특별하며 및 같은 셸 내장 명령의 맥락에서 마지막 배경 PID로만 확장됩니다 kill. 불행히도 이는 페이지에서 명확하지 않습니다 man.

%% 및 %+ 기호는 현재 작업에 대한 쉘의 개념을 나타냅니다. 이는 포그라운드에 있거나 백그라운드에서 시작된 동안 중지된 마지막 작업입니다.


추신: 이것을 명령 문자열로 만들어야 하는 경우 kill $!런타임에 확장되도록 작은따옴표로 묶어야 합니다. 더 나은 방법은 별칭 대신 함수를 작성하여한계.

관련 정보