Как убить задание, которое было инициировано в другой оболочке (окно терминала или вкладка)?

9

Если я начну процесс и задний фон в терминальном окне (скажем ping google.com &), я могу убить его с помощью kill %1(при условии, что это задание 1).

Однако, если я открою другое окно терминала (или вкладку), фоновый процесс не будет указан в списке jobsи не может быть уничтожен напрямую с помощью kill.

Можно ли убить этот процесс из другого окна терминала или вкладки?

Примечание: я использую эмулятор терминала Xfce 0.4.3 и bash (хотя, если решение существует в другой общей оболочке, но не bash, я тоже открыт для этого)

DQdlM
источник

Ответы:

10

Да, все, что вам нужно знать, это идентификатор процесса (PID) процесса. Вы можете найти это с помощью psкоманды или pidofкоманды.

kill $(pidof ping)

Должно работать с любой другой оболочки. Если это не так, вы можете использовать ps и grep для ping.

Кит
источник
6

Если вы наберете topв другом окне терминала, в нем будут перечислены все запущенные процессы. Запишите свой идентификатор процесса jobтам, а затем нажмите, qчтобы покинуть этот экран. Затем killпроцесс как обычно.

arthankamal
источник
спасибо за ваш ответ, но topон не отображает все конкретные процессы, запущенные в оболочке (например, он не показывает ping). Это дает мне PID для эмулятора терминала, но это убивает эмулятор терминала, как и следовало ожидать.
DQdlM
1
если вы наберете top -U yourusernameв терминале, он перечислит только процесс, который вы используете.
Артанкамаль
классно! +1 только за это! спасибо
DQdlM
в верхней части нажмите k, затем 15 для мягкого убийства (попробуйте сначала), 9 для жесткого убийства.
Майкл Даррант
4

Я обычно делаю что-то вроде этого:

ps aux | grep $PROCESS | grep -v grep | awk '{print $2 " " $11}'

Например, если $ PROCESS = "bash", это вывод моей текущей сессии:

2683 bash
4481 bash
5695 bash

Тогда я бы kill $PIDни за что /bin/bashбольше не хотел бегать.

ps, grepИ (необязательно) awkполезны для охоты на ИДП к kill.

Чарльз Бойд
источник