Mate todos os trabalhos em segundo plano

44

Existe uma forma mais compacta de matar trabalhos em segundo plano do que:

for i in {1..5}; do kill %$i; done

Além disso, {1..5} obviamente tem um número mágico embutido nele, como eu posso torná-lo "N" com N sendo o número certo, sem fazer um:

$(jobs | wc -l)

Eu realmente uso \ j no PS1 para obter o número de tarefas gerenciadas, isso é equivalente?

    
por Robottinosino 19.07.2012 / 23:49

3 respostas

80

Para apenas kill de todos os trabalhos em segundo plano gerenciados por bash , do

kill $(jobs -p)

Observe que, como jobs e kill estão incorporados em bash , você não deve se deparar com nenhum erro do tipo Lista de argumentos por muito tempo .

    
por 22.07.2012 / 18:19
10

Use xargs em vez do subcomando $(jobs -p) , porque se jobs -p estiver vazio, o comando kill falhará.

jobs -p | xargs kill
    
por 22.11.2016 / 19:54
2

Eu prefiro verificar se existem trabalhos que existem antes de matá-los - desta forma, o script não falhará se não houver nada em execução.

Também é mais curto para digitar. Jogue isso no seu .bash_profile :

function killjobs () {
    JOBS="$(jobs -p)";
    if [ -n "${JOBS}" ]; then;
        kill -KILL ${JOBS};
    fi
}

Em seguida, execute:

killjobs

Para matar todos os trabalhos em execução.

    
por 11.02.2016 / 12:04

Tags