resumo:
Você deve usar jobs
para listar e usar kill %n
para anular o segundo processo em segundo plano, e se o seu bash o suportar: kill %-1
matará o n-1'th processo em segundo plano.
detalhes:
# 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 &
#
Observe que a "entrada" adicional necessária para ver a mensagem [2]- Terminated find /./ -print >/dev/null 2>/dev/null
(mostrada apenas antes do próximo prompt)
Agora, se o seu bash suporta a notação kill %-n
: é fácil:
kill %-1 # will kill not the n'th (or last), but the n-1'th backgrounded process
Mas se o seu bash não suporta kill %-1
: Aqui está uma tentativa (excessivamente complexa ...) de automação (que só deve matar se houver um n-1 ° trabalho a ser morto ... esperançosamente)
jobs \
| awk 'BEGIN {cur="";}
/./ { last=cur ; cur=$0 ; }
END { if ( last != "")
{ print last ;} }' \
| tr -d '[]+-' \
| awk '{ print $1 }' \
| xargs -I __ echo kill %__
(tire o "eco" assim que tiver certeza de que faz o que quiser ...)