Come nel titolo: come eliminare tutti i processi in background in zsh?Come uccidere tutti i processi in background in zsh?
risposta
alias killbg='kill ${${(v)jobstates##*:*:}%=*}'
. È zsh, non c'è bisogno di strumenti esterni.
Se si vuole uccidere numero di lavoro N:
function killjob()
{
emulate -L zsh
for jobnum in [email protected] ; do
kill ${${jobstates[$jobnum]##*:*:}%=*}
done
}
killjob N
alias killbg='for job in \`jobs -l | egrep -o "([0-9][0-9]+)"`;
Super! Ora prova a sospendere 'echo 123 | meno e controlla cosa ucciderà. Suggerimento: quando si esegue il comando 'kill'' echo 123' sarà già morto e il suo PID potrebbe essere già stato acquisito. Quindi con tale pipe sospesa con il tuo 'killbg' puoi uccidere 2 processi innocenti: processare' 123' (argomento 'echo') ed elaborare quello che è successo per riprendere il PID' echo'. – ZyX
La mia soluzione fallirà in questo caso (tenterà di uccidere '{echoPID} = done: {lessPID}'). – ZyX
Questo funziona sia per ZSH e 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 `[email protected]` 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 [email protected] $(sed --regexp-extended --quiet 's/\[([[:digit:]]+)\].*/%\1/gp' <<< "$kill_list" | tr '\n' ' ')
else
return 0
fi
}
@zyx risposta non ha funzionato per me.
più su di esso qui: https://gist.github.com/CMCDragonkai/6084a504b6a7fee270670fc8f5887eb4
modifiche di minore entità @ risposta di ZXY ...
Sul mio sistema, ho scoperto che i lavori sospesi non sono stati uccisi correttamente con il segnale di default uccidere. Ho dovuto effettivamente cambiarlo in kill -KILL
per ottenere i lavori in background suspended
da morire correttamente.
alias killbg='kill -KILL ${${(v)jobstates##*:*:}%=*}'
Prestare particolare attenzione alle SINGOLE QUOTE intorno a questo. Se passassi alle doppie virgolette, avresti bisogno di sfuggire a ogni "$". Si noti che NON è possibile utilizzare un function
per eseguire il wrapping di questo comando poiché la funzione incrementerà l'array $jobstates
causando la funzione di tentare di uccidersi ... È necessario utilizzare un alias.
Il killjob
script di cui sopra è un po 'ridondante in quanto basta che si può fare:
kill %1
Meno battute ed è già in costruzione zsh
.
- 1. pronta zsh - controllando se ci sono processi in background
- 2. Come uccidere tutti i processi con un determinato nome parziale?
- 3. Ottenere l'elenco dei processi in esecuzione e uccidere i loro servizi in background
- 4. Processi in background in Node.js
- 5. Come eliminare tutti i processi figlio all'uscita?
- 6. Come uccidere tutti i pool worker in multiprocesso?
- 7. Come ottenere tutti i processi in un display da Xvfb?
- 8. Come si elencano tutti i processi figli in python?
- 9. Come uccidere tutti i processi all'interno del rubino Thor in stop?
- 10. Processi in background asincroni in Python?
- 11. elencando tutti i processi in iOS 5.0.1
- 12. processi in esecuzione in background php
- 13. Pycharm: termina tutti i processi in esecuzione
- 14. eseguendo sequenzialmente processi in background unix
- 15. Esegui processi in background con beanstalk elastico
- 16. Come trovare tutti i processi figli?
- 17. Come uccidere tutti i server in esecuzione in gulp utilizzando un comando bash
- 18. Come si eliminano tutti i processi in Mysql "show processlist"?
- 19. Processi in background asincroni con web2py
- 20. Come attendere correttamente i processi in primo piano/in background nella mia shell in C?
- 21. Come posso fare in modo che Perl aspetti i processi figli avviati in background con system()?
- 22. Elenco di tutti i processi in esecuzione in Contiki OS
- 23. Elimina tutti i processi per un dato utente
- 24. Come uccidere i cursori morti in MongoDB
- 25. Attendere bash i processi in background in script per essere finito
- 26. Processi in background in batch con output reindirizzato
- 27. Come è possibile eseguire i processi in background di Rails su Elst Beanstalk AWS?
- 28. Come pulire i processi figli su child_process.spawn() in node.js
- 29. Come uccidere un processo non in esecuzione in Android
- 30. Come posso terminare tutti i processi di subshell?
Come un noob 'zsh', la mente che spiega quella prima linea? –
@ZachRiggle Si trova in 'man zshexpn' e' man zshmodules': '$ jobstates' è un parametro array associativo,' (v) 'seleziona solo i valori da questo array,' # rende make zsh rimuovi il pattern dato a partire dall'inizio di stringa, seleziona il modello minimo di lunghezza per la rimozione, '*: *:': modello che rende zsh rimuovere prima i due campi separati da due punti di ogni valore ('#' sui parametri dell'array viene applicato a ciascun valore), '%' è come '#', ma per la fine delle stringhe e '= *' rende zsh rimuovere tutto dopo l'ultimo segno eq incluso il segno stesso.Ogni valore '$ jobstates' assomiglia a' stato-lavoro: mark: pid = stato ... '. – ZyX
Sembra che abbia un bug qui: non funziona se l'intera pipa è stata sospesa. – ZyX