Убить работу в Ubuntu

22

Вероятно, это часто задаваемый вопрос, но я не смог найти хорошую документацию.

У меня есть рабочие места в моей системе:

foo@fooBox:~/tmp$ jobs
[1]+  Stopped                 foo bar baz

Как я могу убить этот процесс? Я пробовал разные команды, например kill 1, но это не сработало.

Ник Хейнер
источник
альтернативно, $ fg [enter] [ctrl-c]: p
bubu
@bubu: Это не будет работать для некоторых программ, которые ловят SIGINT, например vim.
Вуфферс
@Mark Szymanski Я знал, я знал: p
bubu

Ответы:

30

Вы можете использовать метод, предложенный @fideli, или killкоманду:

kill %1

Это убьет первую приостановленную команду. Вы также можете найти список приостановленных команд, например:

jobs

и это обеспечит вывод как такой:

[1]+  Stopped                 yes

Если у вас есть несколько остановленных заданий, число в скобках ( [1]) будет номер задания, то один вы предоставляете после %в killкоманде.

Wuffers
источник
Это здорово! Узнал что-то новое о kill.
Фидели
1
Как же я это понял -bash: kill: (3593) - Operation not permitted? Когда я использую это с sudo, я получаю этоkill: %1: invalid process id
CMCDragonkai
1
@CMCDragonkai Вы попали в ситуацию, когда выполняемая вами команда теперь принадлежит другому пользователю, поскольку вы использовали ее sudo, поэтому вы не можете ее убить, но запуск killс помощью sudoозначает, что у вас больше нет доступа к списку заданий вашего пользователя (попробуйте бегаю, sudo jobsчтобы понять, что я имею в виду). Вместо этого, поскольку теперь у вас есть PID, просто запустите sudo kill 3593.
Морлок
Как фоновый процесс может принадлежать другому пользователю?
CMCDragonkai
6

Если вы запустите, ps axвы получите список всех запущенных процессов. Найдите тот, кого вы хотите убить, и запишите номер в PIDстолбце. Например, скажем, номер был 10203, вы бы запустить:

kill 10203

Вы также можете запустить, ps ax | grep fooчтобы найти точную программу, которую вы ищете. Наконец, вы можете запустить:

killall foo

убить все случаи foo.

fideli
источник