마지막 프로세스를 종료하는 방법을 알고 있습니다.
kill $!
하지만 마지막 프로세스, 즉 마지막 프로세스가 아니라 마지막 프로세스 이전의 프로세스를 종료하고 싶습니다.
나는 노력했다
kill $$(($! -1))
그러나 그것은 작동하지 않았습니다.
답변1
요약:
jobs
using 을 나열하고 를 사용하여 n번째 백그라운드 프로세스를 종료 해야 합니다 kill %n
. bash가 지원하는 경우 kill %-1
n-1번째 백그라운드 프로세스가 종료됩니다.
세부 사항:
# find / -print >/dev/null 2>/dev/null &
[1] 1291234
# find /./ -print >/dev/null 2>/dev/null &
[2] 2162424
# find /././ -print >/dev/null 2>/dev/null &
[3] 680176
#
# jobs
[1] Running find / -print >/dev/null 2>/dev/null &
[2]- Running find /./ -print >/dev/null 2>/dev/null &
[3]+ Running find /././ -print >/dev/null 2>/dev/null &
# kill %2 # or kill %-1 if your version of bath supports it
#
[2]- Terminated find /./ -print >/dev/null 2>/dev/null
# jobs
[1]- Running find / -print >/dev/null 2>/dev/null &
[3]+ Running find /././ -print >/dev/null 2>/dev/null &
#
메시지를 보려면 추가 "입력"이 필요합니다 [2]- Terminated find /./ -print >/dev/null 2>/dev/null
(다음 프롬프트 이전에만 표시됨).
이제 bash가 kill %-n
: 기호를 지원하면 쉽습니다.
kill %-1 # will kill not the n'th (or last), but the n-1'th backgrounded process
그러나 bash가 이를 지원하지 않는 경우 kill %-1
다음은 (과도하게 복잡한...) 자동화 시도입니다(n-1 작업이 종료된 경우에만 종료되어야 합니다... 바라건대).
jobs \
| awk 'BEGIN {cur="";}
/./ { last=cur ; cur=$0 ; }
END { if ( last != "")
{ print last ;} }' \
| tr -d '[]+-' \
| awk '{ print $1 }' \
| xargs -I __ echo kill %__
("에코"가 원하는 효과를 낸다고 확신하면 꺼내세요...)