Cela fonctionne à la fois pour ZSH et Bash :
: '
killjobs - Run kill on all jobs in a Bash or ZSH shell, allowing one to optionally pass in kill parameters
Usage: killjobs [zsh-kill-options | bash-kill-options]
With no options, it sends `SIGTERM` to all jobs.
'
killjobs () {
local kill_list="$(jobs)"
if [ -n "$kill_list" ]; then
# this runs the shell builtin kill, not unix kill, otherwise jobspecs cannot be killed
# the `example@unixlinux.online` list must not be quoted to allow one to pass any number parameters into the kill
# the kill list must not be quoted to allow the shell builtin kill to recognise them as jobspec parameters
kill example@unixlinux.online $(sed --regexp-extended --quiet 's/\[([[:digit:]]+)\].*/%\1/gp' <<< "$kill_list" | tr '\n' ' ')
else
return 0
fi
}
La réponse de @zyx n'a pas fonctionné pour moi.
Plus d'informations ici :https://gist.github.com/CMCDragonkai/6084a504b6a7fee270670fc8f5887eb4
il faut utiliser le builtin la commande intégrée zsh avec l'autre kill commande intégrée zsh comme :
builtin kill %1
comme kill est également un fichier binaire séparé à partir de util-linux package (amont, miroir) situé dans /usr/bin/kill qui ne prend pas en charge les emplois (kill: cannot find process "%1" ).
utilisez le mot-clé builtin pour éviter les conflits de noms ou enable le kill intégré s'il est désactivé.
il existe un concept de désactivation et d'activation des commandes intégrées (c'est-à-dire les propres commandes du shell telles que cd et kill ) dans les shells, et dans zsh, vous pouvez activer (désactivé) kill intégré comme :
enable kill
émettre disable pour vérifier si le builtin est désactivé (et enable pour voir ceux qui sont activés).
alias killbg='kill ${${(v)jobstates##*:*:}%=*}'
. C'est zsh, pas besoin d'outils externes.
Si vous voulez tuer le travail numéro N :
function killjob()
{
emulate -L zsh
for jobnum in example@unixlinux.online ; do
kill ${${jobstates[$jobnum]##*:*:}%=*}
done
}
killjob N
Ajustement mineur de la réponse de @Zxy...
Sur mon système, j'ai constaté que les travaux suspendus n'étaient pas correctement supprimés avec le signal de suppression par défaut. J'ai dû le changer en kill -KILL pour obtenir suspended les tâches d'arrière-plan disparaissent correctement.
alias killbg='kill -KILL ${${(v)jobstates##*:*:}%=*}'
Portez une attention particulière aux CITATIONS SIMPLES autour de cela. Si vous passez aux guillemets doubles, vous devrez échapper chaque "$". Notez que vous ne pouvez PAS utiliser un function pour envelopper cette commande puisque la fonction incrémentera le $jobstates tableau obligeant la fonction à essayer de se tuer... Doit utiliser un alias.
Le killjob le script ci-dessus est un peu redondant puisque vous pouvez simplement faire :
kill %1
Moins de frappes et c'est déjà intégré à zsh .