I am running a script which has to be suspended before killing.
Não, não. Um script não precisa ser suspenso antes de ser eliminado. Você pode matá-lo a qualquer momento.
The first time I run it there is only one pid for the process. I kill it and run again and the number of PID goes increasing.
Então você não está realmente matando! Se você executar ./toplog.sh
e suspendê-lo, isso criará apenas um único trabalho, ou seja, uma única linha na saída de jobs
. O próprio script pode criar vários processos, mas jobs
lista apenas o próprio script (o líder do grupo de processos, em termos técnicos). Se você vir mais e mais trabalhos, isso significa que você ainda está vendo as tarefas antigas que tentou sem sucesso matar.
O motivo pelo qual você não conseguiu matar os trabalhos é provavelmente porque eles estão suspensos. Quando um processo é suspenso, ele não pode reagir aos sinais. Se você enviar um sinal para um processo suspenso, o sinal só terá efeito quando o processo for retomado. As exceções são sinais que são gerenciados diretamente pelo kernel, sem envolver o processo. Uma dessas exceções é o sinal para retomar um processo (SIGCONT), obviamente, acorda o processo imediatamente. Outra categoria de exceções são sinais que matam o processo sem perguntar: isso sempre inclui SIGKILL e também inclui outros sinais (SIGINT, SIGHUP, SIGTERM, SIGQUIT, ...) se o processo não tiver definido um manipulador para esse sinal.
Se kill %1
matar o trabalho 1, o shell informará que o trabalho foi encerrado. Se o processo definiu um manipulador para SIGTERM, então kill %1
não terá efeito enquanto o processo estiver suspenso; para matar o processo, você também precisa retomá-lo:
kill %1; kill -CONT %1
Se você quiser forçar a eliminação do processo sem dar a oportunidade de limpeza, faça
kill -KILL %1
(ou kill -9 %1
para breve).
Se você quiser matar todos os processos toplog.sh
, se eles foram lançados deste terminal ou não, você pode usar pkill toplog.sh
.