linux: Zabij zadanie w tle

Jak zabić Ostatnie wywołane zadanie w tle w Linuksie?

Przykład:

doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
Author: Gilles, 2009-10-26

8 answers

Jest do tego specjalna zmienna w bash:

kill $!

$! rozszerza do PID ostatniego procesu wykonanego w tle.

 203
Author: falstro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-26 13:14:39

Możesz zabić według numeru zadania. Po umieszczeniu zadania w tle zobaczysz coś w stylu:

$ ./script &
[1] 35341

To {[2] } jest numerem zadania i może być odwołane w następujący sposób:

$ kill %1
$ kill %%  # Most recent background job

Aby zobaczyć listę numerów zadań użyj polecenia jobs. Więcej z man bash:

Istnieje wiele sposobów, aby odnieść się do zadania w powłoce. Znak % wprowadza nazwę zadania. Numer zadania n może być określana jako %n. Zadanie może być również określane za pomocą prefiksu o nazwie użytej do jej uruchomienia, lub używając podciągu, który pojawia się w wierszu poleceń. Na przykład, %ce odnosi się do zatrzymanego zadania ce. Jeśli prefiks pasuje do więcej niż jednego zadania, bash Zgłoś błąd. Z drugiej strony użycie %?ce odnosi się do każdego zadania zawierającego łańcuch ce w wierszu poleceń. Jeśli substring pasuje do więcej niż jednego zadania, bash zgłasza błąd. Symbole %% i %+ odnoszą się do pojęcia powłoki bieżącego zadania, które jest ostatnim praca zatrzymała się, gdy była na pierwszym planie lub rozpoczęła się w tle. Poprzednia praca może być odwołane za pomocą %-. W wyjściu odnoszącym się do zadań (np. wyjście polecenia jobs), bieżące zadanie jest zawsze oznaczony +, a poprzednie zadanie -. Pojedynczy % (bez towarzyszącej specyfikacji zadania) odnosi się również do aktualna praca.

 263
Author: John Kugelman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-26 13:18:11

Poniższe polecenie wyświetla listę wszystkich procesów w tle w sesji, wraz z pid. Następnie można go użyć do zabicia procesu.

jobs -l

Przykładowe użycie:

$ sleep 300 &
$ jobs -l
[1]+ 31139 Running                 sleep 300 &
$ kill 31139
 41
Author: Dave Vogt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-26 13:18:59

To powinno zabić wszystkie procesy w tle:

jobs -p | xargs kill -9
 22
Author: Prabhu Are,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-20 05:38:38
skill doB

skill jest wersją polecenia kill, która pozwala wybrać jeden lub wiele procesów na podstawie podanych kryteriów.

 2
Author: gte525u,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-20 05:38:58

Potrzebujesz jego pid... użyj "ps-A", aby go znaleźć.

 1
Author: jldupont,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-26 13:12:55

Jest to odpowiedź nie na temat, ale dla tych, którzy są zainteresowani, to może cenne.

Jak w odpowiedzi @ John Kugelman, % jest związane ze specyfikacją pracy. Jak to skutecznie znaleźć? użyj polecenia &wzorzec less, wygląda na to, że man używa mniej pager (nie jestem pewien), W Man bash wpisz & % wtedy wpisz Enter wyświetli tylko wiersze zawierające'%', aby wyświetlić wszystko, wpisz &. następnie wejdź.

 0
Author: qeatzy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-10 02:24:58

Wystarczy użyć komendy killall:

Killall taskname

Aby uzyskać więcej informacji i bardziej zaawansowane opcje, wpisz "man killall".

 -1
Author: zakk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-26 13:14:28