nie działało, gdy praca brzmiała „sudo su”. tzn. sudo kill `jobs -p`nie działało, ale wyraźnie wpisało się PID.
user13107,
14
Dlaczego jest to tak wysoko oceniane? To jest źle. Jeśli procesy zostaną zatrzymane, killtakie jak to nic nie zrobi, ponieważ procesy są zatrzymane, nie będą przetwarzać SIGTERM (-15), który jest do nich domyślnie wysyłany.
To powinno wystarczyć, ale myślę, że powinien on najpierw wysłać SIGTERM (-15) przed wysłaniem SIGKILL (-9). Być może lepiej byłoby zaproponować coś takiego: „kill $ (jobs -p); sleep 3s; kill -9 $ (jobs -p)”. Najpierw wysyłając SIGTERM, zadania mogą wykonać czyste wyjście (zwolnienie przydzielonych zasobów itp.).
rem
3
Kevin Duke, twoja odpowiedź była dla mnie odpowiednia. Nie mogłem głosować, ponieważ nie mam 15 reputacji. zabij -9 $ (zadania -p)
2
@rems Tyle że, jak wskazał slm, nie dostaną SIGTERM, ponieważ są zatrzymani.
Przyjęta odpowiedź zabiłaby wszystkie zadania (co w tym przypadku jest wystarczające), a nie tylko te zatrzymane. Jeśli chcesz zabić tylko tych Zatrzymanych, uruchom:
możesz dodać formatowanie kodu dla tego wiersza, aby ułatwić czytanie.
drcelus
Czy możesz jeszcze raz spojrzeć na swoje formatowanie - użyj czterech spacji na początku wiersza, aby zaznaczyć blok jako kod (zamiast używać odwrotnego kursora). W tej chwili nie jest jasne, czy używasz kodu wstecznego, czy próbujesz wyświetlić kod za pomocą znaków wstecznych.
dunxd
Formatowanie jest w porządku. musimy przekazać zadania -p za pomocą odwrotnych poleceń, w przeciwnym razie nie będzie to uważane za polecenie i spowoduje zgłoszenie błędu.
pon.
5
Na wypadek, gdyby to pomogło komuś innemu - większość ludzi jest tutaj, ponieważ mają zatrzymane procesy, które uruchomili, być może w tle za pośrednictwem powłoki. Musiałem znaleźć procesy, jako root, zatrzymane przez innych użytkowników, dla których warianty jobspolecenia nie będą działać.
Trochę grzebania w tym man psdoprowadziło mnie do tego:
ps -a -o pid,user,cmd,state | grep 'T$'
Objaśnienie: -aflaga mówi: pokaż wszystkie procesy, a następnie -okontroluje dane wyjściowe, jakie informacje będą wyświetlane o każdym procesie. Mam wyboru pid, user, cmd(wiersz poleceń) i state, co jest stan procesu .
Od man ps:
PROCESS STATE CODES
Here are the different values that the s, stat and state output specifiers (header "STAT" or "S") will display to describe the
state of a process:
D uninterruptible sleep (usually IO)
R running or runnable (on run queue)
S interruptible sleep (waiting for an event to complete)
T stopped, either by a job control signal or because it is being traced
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
Z defunct ("zombie") process, terminated but not reaped by its parent
więc w końcu przesyłam do niego, grep T$co mówi: pokaż mi wszystkie procesy, które mają T w ostatniej kolumnie.
A potem mam ładną listę wszystkich procesów od różnych użytkowników, którzy są w stanie zatrzymania.
$ ps -a -o pid,user,cmd,state | grep 'T$'
865 joson74+ python T
885 joson74+ sh -c less T
886 joson74+ less T
1014 minames+ python3.4 -i /home/minames T
5352 MooKo nano stdio.h T
7851 harry tmux attach T
12083 harry tmux attach T
13495 gorylla+ python3.4 -i /home/gorylla1 T
18009 conr1d vim T
19664 enythin+ python T
24906 wardlist python T
Aby zatrzymać zadania dołączone do bieżącej powłoki, jobs -psjest prostsze niż ta odpowiedź. To powiedziawszy, ta odpowiedź nie pokazuje tylko zadań zatrzymanych za pośrednictwem Ctrl-Zpowłoki, ale wszystkich zatrzymanych zadań: innych powłok, innych użytkowników , w tym zadań debugowanych (np. Przez gdb).
Stéphane Gourichon,
Dla mnie najlepsza odpowiedź, ale niezupełnie działająca. Musiałem użyć, ps -el | grep Taby znaleźć procesy w stanie „T”.
dr0i
4
Jeśli chcesz usunąć niektóre zatrzymane zadania, ale nie wszystkie, spróbuj tego:
Po pierwsze, wypisz listę zadań, otrzymasz coś takiego:
Zwykle jeśli otrzymasz tę wiadomość, musisz się dwukrotnie wylogować. Np. Najpierw Ctrl+Dwyświetla komunikat ostrzegawczy informujący o zatrzymanych zadaniach, naciśnięcie po raz drugi wyloguje cię z zabicia zleceń. To samo dotyczy poleceń logouti exitpoleceń.
Aby je zabić ręcznie, spróbuj: kill $(jobs -p).
Jeśli nie chcesz zabijać zadań z bieżącej powłoki, możesz usunąć je z tabeli aktywnych zadań bez zabijania za pomocą disownpolecenia. Na przykład
Zatrzymana praca może być także określana przez stan procesu ( Tznaków), co oznacza, że proces zatrzymano za pomocą sygnału, takich jak SIGSTOP, SIGTSTPlub inne (np SIGTTINlub SIGTTOU).
W przypadku, gdy jobswbudowane polecenie powłoki nie jest dostępne, zatrzymane procesy można wyświetlić za pomocą następującego polecenia:
ps wuax | awk '$8 ~ "T"'
Aby zabić ich wszystkich, możesz w zasadzie wpisać:
shopt -s checkjobs
mój .bashrcOdpowiedzi:
Aby szybko zabić wszystkie zatrzymane zadania w ramach bash, wpisz:
jobs -ps
wyświetla identyfikatory procesów (-p
) zatrzymanych (-s
) zadań.kill -9 `jobs -ps`
wysyła do wszystkich sygnały SIGKILL.źródło
sudo kill `jobs -p`
nie działało, ale wyraźnie wpisało się PID.kill
takie jak to nic nie zrobi, ponieważ procesy są zatrzymane, nie będą przetwarzać SIGTERM (-15), który jest do nich domyślnie wysyłany.Spróbuj wpisać to:
źródło
Przyjęta odpowiedź zabiłaby wszystkie zadania (co w tym przypadku jest wystarczające), a nie tylko te zatrzymane. Jeśli chcesz zabić tylko tych Zatrzymanych, uruchom:
źródło
awk '/Stopped/{print $3}')
-s
argumentem na przyjętych filtrów odpowiedział, tylko zatrzymany jedynekNajłatwiej jest po prostu natychmiast spróbować ponownie wyjść;
bash
oznacza to „zabij wszystkie zatrzymane zadania i wyjdź”.źródło
źródło
Na wypadek, gdyby to pomogło komuś innemu - większość ludzi jest tutaj, ponieważ mają zatrzymane procesy, które uruchomili, być może w tle za pośrednictwem powłoki. Musiałem znaleźć procesy, jako root, zatrzymane przez innych użytkowników, dla których warianty
jobs
polecenia nie będą działać.Trochę grzebania w tym
man ps
doprowadziło mnie do tego:Objaśnienie:
-a
flaga mówi: pokaż wszystkie procesy, a następnie-o
kontroluje dane wyjściowe, jakie informacje będą wyświetlane o każdym procesie. Mam wyborupid
,user
,cmd
(wiersz poleceń) istate
, co jest stan procesu .Od
man ps
:więc w końcu przesyłam do niego,
grep T$
co mówi: pokaż mi wszystkie procesy, które mają T w ostatniej kolumnie.A potem mam ładną listę wszystkich procesów od różnych użytkowników, którzy są w stanie zatrzymania.
źródło
jobs -ps
jest prostsze niż ta odpowiedź. To powiedziawszy, ta odpowiedź nie pokazuje tylko zadań zatrzymanych za pośrednictwemCtrl-Z
powłoki, ale wszystkich zatrzymanych zadań: innych powłok, innych użytkowników , w tym zadań debugowanych (np. Przez gdb).ps -el | grep T
aby znaleźć procesy w stanie „T”.Jeśli chcesz usunąć niektóre zatrzymane zadania, ale nie wszystkie, spróbuj tego:
Po pierwsze, wypisz listę zadań, otrzymasz coś takiego:
wyślij kill do zatrzymanego zadania, nie zrobi nic poza kolejką niż wprowadzi go na pierwszy plan, zakończy działanie
źródło
Zwykle jeśli otrzymasz tę wiadomość, musisz się dwukrotnie wylogować. Np. Najpierw Ctrl+Dwyświetla komunikat ostrzegawczy informujący o zatrzymanych zadaniach, naciśnięcie po raz drugi wyloguje cię z zabicia zleceń. To samo dotyczy poleceń
logout
iexit
poleceń.Aby je zabić ręcznie, spróbuj:
kill $(jobs -p)
.Jeśli nie chcesz zabijać zadań z bieżącej powłoki, możesz usunąć je z tabeli aktywnych zadań bez zabijania za pomocą
disown
polecenia. Na przykładZatrzymana praca może być także określana przez stan procesu (
T
znaków), co oznacza, że proces zatrzymano za pomocą sygnału, takich jakSIGSTOP
,SIGTSTP
lub inne (npSIGTTIN
lubSIGTTOU
).W przypadku, gdy
jobs
wbudowane polecenie powłoki nie jest dostępne, zatrzymane procesy można wyświetlić za pomocą następującego polecenia:Aby zabić ich wszystkich, możesz w zasadzie wpisać:
Oto prosty test:
źródło