Jak w tytule - jak zabić wszystkie procesy w tle w zsh?Jak zabić wszystkie procesy w tle w zsh?
Odpowiedz
alias killbg='kill ${${(v)jobstates##*:*:}%=*}'
. To jest zsh, nie ma potrzeby w zewnętrznych narzędziach.
Jeśli chcesz zabić numer zadania 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! Teraz spróbuj zawiesić 'echo 123 | less' i sprawdź, co zabije. Podpowiedź: do czasu uruchomienia 'kill'' proces echo 123' będzie już martwy, a jego PID może już zostać pobrane. Tak więc z zawieszoną rurą z 'killbg' możesz zabić 2 niewinne procesy: proces' 123' (argument 'echo') i proces, który spowodował odzyskanie' echo' PID. – ZyX
Moje rozwiązanie nie powiedzie się jednak w tym przypadku (spróbuje zabić '{echoPID} = done: {lessPID}'). – ZyX
Działa to zarówno dla zsh i 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 odpowiedź nie działa dla mnie.
Więcej o tym tutaj: https://gist.github.com/CMCDragonkai/6084a504b6a7fee270670fc8f5887eb4
Minor korekta @ odpowiedź ZXY za ...
W moim systemie, stwierdziliśmy, że zawieszone zadania nie zginęło poprawnie z sygnałem domyślny zabić. Musiałem faktycznie zmienić to na kill -KILL
, aby uzyskać suspended
zadań tła, aby umrzeć prawidłowo.
alias killbg='kill -KILL ${${(v)jobstates##*:*:}%=*}'
Zwróć szczególną uwagę na POJEDYNCZE CYTATY wokół tego. Jeśli przełączyłeś się na podwójne cudzysłowy, musisz uciec z każdego "$". Zauważ, że NIE możesz użyć function
do zawijania tego polecenia, ponieważ funkcja zwiększy tablicę $jobstates
powodując, że funkcja spróbuje zabić się ... Musi użyć aliasu.
killjob
skrypt powyżej jest nieco zbędny, ponieważ można po prostu zrobić:
kill %1
mniej klawiszy i to już budować w zsh
.
- 1. Jak zabić wszystkie procesy wewnątrz ruby Thor na przystanku?
- 2. Asynchroniczne procesy w tle w języku Python?
- 3. zabić proces i procesy składowe w Ruby w systemie Windows
- 4. Jak zabić proces w tle z funkcji systemowej zadzwoń
- 5. Jak zabić wszystkie procesy, które zostały otwarte przez skrypt powłoki po Ctrl + C?
- 6. jak zabić proces i procesy potomne z Pythona?
- 7. Jak rejestrować wszystkie procesy działające w kontenerze Docker?
- 8. Jak zabić proces nohup?
- 9. W geenie, w jaki sposób mogę zabić wszystkie uruchomione greenlety?
- 10. Jak zatrzymać/zabić zapytanie w postgresql?
- 11. Leiningen - jak zabić proces potomny?
- 12. Jak mogę rozwidlić procesy w tle ze skryptu CGI Perl w systemie Windows?
- 13. Jak zabić dziecko w nodejs?
- 14. Jak zabić proces w cygwin?
- 15. Jak zabić proces w kosmosie
- 16. Java Garbage Collection zatrzymuje wszystkie procesy Java
- 17. Zabij wszystkie procesy dla danego użytkownika.
- 18. jak używać zabić SIGUSR2 w bash?
- 19. Czy uWSGI uruchamia wszystkie procesy podczas rozruchu?
- 20. Jak zabić zadanie wieloprocesorowe w języku Python?
- 21. linux: zabij zadanie w tle
- 22. Procesy tła w partii z przekierowanym wyjściem
- 23. Jak zabić konkretną zakładkę/proces chrome
- 24. Jak poprawnie zabić sesje w Zend Framework?
- 25. zsh w IntelliJ
- 26. Jak zabić wszystkie wątki, które nie są głównym wątkiem?
- 27. Jak zabić połączenia MySQL
- 28. Jak zabić zadania hadoopowe
- 29. Jak sprawić, by Perl czekał, aż procesy potomne rozpoczną się w tle z systemem()?
- 30. Jak mogę sprawdzić, jakie procesy działają na zdalnym serwerze Ubuntu i ich zabić?
Jako "zsh' noob, umysł wyjaśniający ten pierwszy wiersz? –
@ZachRiggle Jest to w 'man zshexpn' i' man zshmodules': '$ jobstates' jest parametrem asocjacyjnej tablicy,' (v) 'wybiera tylko wartości z tej tablicy,' # 'sprawia, że zsh usuwa dany wzorzec od początku ciągu znaków, wybiera najmniejszy wzorzec do usunięcia, '*: *:': wzór, który powoduje, że zsh usuwa pierwsze dwa pola oddzielone dwukropkami dla każdej wartości ('#' dla parametrów tablicy jest stosowane do każdej wartości), '%' jest jak '#', ale na końcu łańcuchów i '= *' sprawia, że zsh usuwa wszystko po ostatnim znaku eq, włączając w to sam znak.Każda wartość '$ jobsstates' wygląda jak' job-state: mark: pid = state ... '. – ZyX
Wygląda na to, że mam tutaj błąd: nie działa, jeśli cała rura została zawieszona. – ZyX