Я новичок в Linux. Собственно говоря, сейчас я использую Cygwin, а не сам Linux.
Я пытаюсь установить RVM (Менеджер версий Ruby).
я делал rm -r ./.rvm -i
команда. Я хотел удалить .rvm
папку и посмотрите, как меня попросили удалить или нет файл / каталог. Я видел несколько и остановил это Ctrl+Z
а затем удалил весь .rvm
папку с Windows Explored, просто отправил в корзину.
Но когда я хотел выйти из терминала с exit
command я получил сообщение о том, что я остановил работу:
$ jobs
[1]+ Stopped rm -r ./.rvm -i
Вот Читал как убить остановленную работу:
kill `jobs -p`
Но я решил попробовать с синтаксисом команды pipe, о котором читал Вот:
Выход каждой команды в конвейере подключается через конвейер ко входу следующей команды.
Итак, я сделал эти попытки, но не смог получить желаемый результат:
$ jobs -p | kill
$ jobs -p | kill -n 15 # 15 is SIGTERM signal
$ jobs -p | kill -n=15 # got error wrong signal spec
$ jobs -p | kill -s SIGTERM
И я не понимаю, почему это не работает. jobs -p
перечисляет идентификаторы процессов:
$ jobs -p
340
Так что 340
ID должен перейти в kill -n 15
команда, и это должно убить работу. Но этого не происходит. Зачем? Можно ли в этом случае использовать трубу?
kill
команда)xargs
, но нужно проявлять осторожность, когда есть потенциальные места - а иногда и в других случаях).В вашем случае jobs -p не должны иметь проблем с xargs, и вы можете использовать следующее:
jobs -p | xargs kill
Если хотите, вы также можете увидеть точные команды, которые он выполняет, используя --verbose (или -t)
jobs -p | xargs --verbose kill
jobs -p | xargs -t kill
xargs
это мощный инструмент. Будьте очень осторожны, передавая ему ввод (find -print0
, grep -Z
, и xargs -0
хорошо ладят при работе с файлами). Это стоит усилий по его использованию (а иногда и экономии времени).
kill
не принимает аргументы из стандартного ввода, где они появятся, если вы передадите их, как вы это сделали. Единственный способ использовать kill
- указать PID или список PID в качестве аргументов командной строки.
Если SIGTERM (-15) не работает, попробуйте SIGKILL (-9). Тем не менее, рекомендуется сначала попробовать SIGTERM.
kill `jobs -p`
kill -9 `jobs -p`
В этом случае вы можете просто ввести: fg, затем нажать ctrl-C.
Если вы хотите напрямую убить оставшийся процесс, в bash вы можете легко выполнить:
kill %1
Что убьет первый процесс в фоновом режиме, как определено заданиями.