Как остановить команду yes linux

Содержание
  1. Kill: Завершение неконтролируемых процессов
  2. Программисты против пользователей
  3. Сигналы и контроль над процессами
  4. Вернемся к нашим SIGHUP’ам
  5. Применение команды kill к процессам
  6. Команда kill, встроенная в Bash
  7. Ресурсы
  8. Команда yes
  9. Описание команды yes
  10. Синтаксис
  11. Без аргументов
  12. С указанием строки
  13. Опции
  14. Примеры использования команды yes
  15. Отвечаем Да на каждый запрос при восстановлении файловой системы
  16. Отвечаем Да при удалении файлов
  17. Создание большого файла
  18. Как автоматически отвечать на Да или Нет в командах Linux-Unix
  19. Как автоматически отвечать на Да или Нет в командах Linux-Unix
  20. Метод 1: Повторять да или нет
  21. Метод 2: команда yes.
  22. Способ 3: команда yes с другим входом.
  23. Вывод:
  24. Небольшая история о команде `yes` в Unix
  25. Пишем yes
  26. Дополнение
  27. Извлечённые уроки
  28. Как автоматически отвечать на Да или Нет в командах Linux-Unix
  29. Как автоматически отвечать на Да или Нет в командах Linux-Unix
  30. Метод 1: Повторять да или нет
  31. Метод 2: команда yes.
  32. Способ 3: команда yes с другим входом.

Kill: Завершение неконтролируемых процессов

Вы усердно боретесь с особо заковыристым приложением Линукс. Продираясь через дебри документации, запускаете команды и правите конфигурационные файлы. Все работает, и жизнь прекрасна. Как вдруг вас ошарашивает сообщение «send the process a SIGHUP» (пошлите процессу SIGHUP).

По инерции вы движетесь дальше. Что это за SIGHUP такой, и как его посылают? Вы почти уверены, что это не команда, но, на всякий случай, пробуете. Нет, не то. Перечитываем ман к приложению:

Когда получен сигнал о том, что программа зависла — SIGHUP, sshd перечитывает свой конфигурационный файл путем запуска самой себя с теми же именем и опциями, с которыми была первоначально запущена, например, /usr/sbin/sshd.

Программисты против пользователей

Сигналы и контроль над процессами

Сигналы нужны для того, чтобы взаимодействовать с процессами и демонами. Процессом называется любое активное действие. Демоны являются фоновыми (background) процессами, и до поры скрыты. Они ждут либо события, на которое они отреагируют, либо наступления времени, назначенного для выполнения некоего задания по расписанию. О наступлении этого события они узнают, получая сигнал от какого-то другого процесса. Каждая программа должна иметь в своем коде обработчик сигналов, чтобы отслеживать (перехватывать) сигналы и правильно реагировать на них. Страница руководства man signal описывает всевозможные сигналы и их действия. Сигналы посылают при помощи команды kill («убить»). Команда kill -l выводит список сигналов и их номеров.

Все демоны и процессы имеют Идентификатор Процесса (PID). PID процесса можно узнать при помощи команды ps:

В приведенном выше примере, вывод команды сильно сокращен — в вашей системе вы увидите куда больше строк и столбцов. Если какой-нибудь процесс «ворует» мощность вашего процессора или вашу память, вы увидите это в столбцах %CPU и %MEM.

Еще быстрее «зарвавшийся» процесс можно обнаружить при помощи команды top. В ней, по умолчанию, процессы, потребляющие больше ресурсов процессора, расположены в верхних строках таблицы. Мы можем немного поиграть с программой top при помощи команды yes:

$ yes carla is teh awesum

Эта команда станет повторять «carla is teh awesum» с большой скоростью, пока вы ее не остановите. Она загонит процент использования процессора в красную зону:

Интересно, что ответственность за разбазаривание мощности CPU ложится на консоль, а не на программу yes, так как yes работает внутри консоли. Если вы перейдете на «истинную» консоль (Ctrl+Alt+F2), то там увидите программу yes с большими цифрами потребления мощности процессора и использования памяти.

Существует несколько способов остановить yes. Если вы перейдете обратно в шелл, где она работает, просто нажмите Ctrl+C. Вы можете также остановить ее при помощи команды kill в другом шелле, как по PID, так и по имени:

$ kill 22236
$ killall yes

Ctrl+C посылает с клавиатуры сигнал SIGINT (2), или завершающее прерывание (terminate interrupt). kill и killall, оба, шлют по умолчанию SIGTERM (15). SIGTERM (15) может быть перехвачен и, либо игнорирован, либо интерпретирован иначе. Так что, в случае непредсказуемой работы, вы можете не добиться завершения процесса.

Читайте также:  Создание загрузочного диска установленной windows

Применяя команду kill к родительскому процессу, вы, как правило (но не всегда), завершаете дочерний вместе с ним. Как узнать, какой процесс является дочерним? Используйте команду ps с опцией -f :

Вернемся к нашим SIGHUP’ам

# killall -HUP ‘process-name’

Как видите, можно использовать PID или имя процесса, а также имя или номер сигнала.

Зачем применять все эти команды, когда можно перезапустить процессы при помощи команды /etc/init.d/foo restart? Ведь предпочтительней контролировать сервисы с помощью их файлов init, так как такой контроль обычно включает санацию, проверку ошибок и другие функции. Если говорить честно, то главная причина использовать команду kill и сигналы состоит в том, чтобы остановить зависший или сбойный процесс как можно аккуратнее, и не прибегать к перезагрузке или завершению сеанса.

Применение команды kill к процессам

kill -STOP ‘pid’
SIGSTOP (19) останавливает процесс, не «убивая» его.

kill -CONT ‘pid’
SIGCONT (18) перезапускает остановленный процесс.

kill -KILL ‘pid’
SIGKILL (9) форсирует немедленное завершение процесса, и не производит никакой чистки.

kill -9 -1
Завершает все ваши процессы (которыми вы владеете).

SIGKILL и SIGSTOP не могут быть перехвачены, блокированы или игнорированы; остальные могут. Это ваше «большое ружье», последнее средство обороны.

Команда kill, встроенная в Bash

$ type -all kill
kill is a shell built-in
kill is /bin/kill

Маловероятно, что у вас возникнут конфликты или странное поведение программ, но на всякий случай выбирайте /bin/kill.

Не поленитесь получше познакомиться с большим миром команды kill, изучив приведенные ниже ресурсы. Это предоставит вам возможность решать возникающие проблемы путем тонкого хирургического вмешательства, не прибегая к перезагрузке системы при каждом сбое программы.

Ресурсы

  • Глава 7 «Starting and Stopping Linux», Поваренная книга Линукс (the Linux Cookbook)

bash (1) — GNU Bourne-Again Shell

yes (1) — повторно выводит строку, пока не будет остановлена

signal (7) — список сигналов

ps (1) — мгновенный снимок идущих процессов

kill (1) — посылает сигнал процессу

killall (1) — «убивает» процесс по имени

pkill (1) — ищет или дает сигнал процессам на основе имени или других атрибутов

skill (1) — посылвет сигнал, либо рапортует о статусе процесса

  • xkill (1) — «убивает» клиента по его Х ресурсу
  • Источник

    Команда yes

    Описание команды yes

    Синтаксис

    Без аргументов

    Если выполнить команду yes без каких либо аргументов, то на экран бесконечно будет выводиться символ «y» (каждый символ на новой строке). Данное поведение используется для автоматического подтверждения запросов, при выполнении других команд (см. примеры ниже).

    С указанием строки

    Если для команды yes задать строку , то на экран будет бесконечно выводиться эта строка (каждая строка на новой строке).

    Опции

    У команды yes всего 2 опции:

    Примеры использования команды yes

    Обычно команда yes используется для того, чтобы при выполнении других команд или скриптов, которые выдают пользователю запросы, требующие ввести y (yes) или n (no), автоматически вводилось y (yes) на каждый запрос. То есть, чтобы избавить пользователя от необходимости самостоятельно отвечать y (Да) на каждый запрос.

    В какой-то степени данная команда уже устарела, потому что многие команды и скрипты имеют опции -y или -f (force), выполняющие аналогичные действия (принудительный ответ y (Да) на каждый запрос).

    Отвечаем Да на каждый запрос при восстановлении файловой системы

    При проверке файловой системы командой fsck могут выдаваться запросы на исправление ошибок в файловой системе. Чтобы автоматически отвечать Да на каждый запрос, можно использовать следующую команду:

    Отвечаем Да при удалении файлов

    Выполним команду rm , чтобы удалить все файлы с расширением .txt

    Данная команда эквивалентна команде:

    Создание большого файла

    Команда yes может использоваться для создания больших файлов, заполненных данными. Например, это может потребоваться при тестировании программ.

    Источник

    Как автоматически отвечать на Да или Нет в командах Linux-Unix

    Как автоматически отвечать на Да или Нет в командах Linux-Unix

    Метод 1: Повторять да или нет

    Вы могли бы использовать этот метод, вторя да или нет до фактической команды или сценария и размещения трубы «|» между этими двумя командами. Для разработки этой методики покажем пример.

    Читайте также:  Попробовать перезапустить службу установщик windows

    Допустим, у вас есть пять текстовых файлов в каталоге «/tmp/AndreyEx», как показано ниже.

    Теперь вы хотите удалить все или только один файл «1.txt» в этом каталоге. Ответ прост, команда rm. Однако эта команда попросить да или нет, прежде чем приступить к удалению файла. Как показано ниже:

    В описанном выше способе мы обеспечили ввод «у» для команды rm. Чтобы этого можно было избежать, укажем перед командой rm, как показано ниже:

    Мы сделали автоматический ответ на команду, но есть еще проблема. Команда echo не может использоваться для ответа как непрерывный ответ да или нет на команды. В этой ситуации вам необходимо использовать следующий метод.

    Метод 2: команда yes.

    Да команда является другим вариантом, если вам надо автоматически отвечать Yes или No на команды в Linux-Unix.

    В основном то, что команда yes делает, он непрерывно выводит строки, передаваемые в них или даже передать строку yes в одиночку. Следовательно, мы можем использовать эту возможность для автоматического ответа да или нет в команды Linux/Unix/скрипты. Давайте рассмотрим пример. У нас есть пять файлов, как раньше, и мы хотим удалить все эти файлы, не отвечая на вопрос о подтверждении Да или Нет. Тогда попробуйте ниже метод, который использует команду «Yes».

    Вот то, что произошло, когда команда yes дается непрерывный ответ, как Yes для следующей команды rm. Результат удаления всех файлов без ручного вмешательства. Это не может быть достигнуто с помощью метода эхо-да, поскольку он дает ввод как Да только один раз .

    Способ 3: команда yes с другим входом.

    Допустим, вы не хотите ответы, вместо Да. В этот раз, когда вы хотите ответить no для всех подтверждений, заданные командой. Далее следует ниже пример. Здесь мы не ответили no на все ответы. Следовательно, никакие файлы не были удалены системой.

    Даже вы можете использовать следующую команду вместо выше.

    Вывод:

    Таким образом, мы можем использовать команду yes для автоматического ответа Да или Нет для команд Linux-Unix. Это очень помогает сисадмину выполнять команды в непрерывной форме, что делает их жизнь легкой и комфортной.

    Источник

    Небольшая история о команде `yes` в Unix

    Какую вы знаете самую простую команду Unix? Есть echo , которая печатает строку в stdout, и есть true , которая ничего не делает, а только завершается с нулевым кодом.

    Среди множества простых Unix-команд спряталась команда yes . Если запустить её без аргументов, то вы получите бесконечный поток символов «y», каждый с новой строки:

    Хотя на первый взгляд команда кажется бессмысленной, но иногда она бывает полезной:

    Когда-нибудь устанавливали программу, которая требует ввести «y» и нажать Enter для установки? Команда yes приходит на помощь! Она аккуратно выполнит эту задачу, так что можете не отвлекаться от просмотра Pootie Tang.

    Пишем yes

    Вот базовая версия на… хм… BASIC.

    А вот то же самое на Python:

    Кажется простым? Погодите!

    Как выясняется, такая программа работает довольно медленно.

    Сравните со встроенной версией на моём «маке»:

    Так что я попытался написать более быструю версию на Rust. Вот моя первая попытка:

    • Строка, которую мы печатаем в цикле, — это первый параметр командной строки под названием expletive. Это слово я узнал из руководства yes .
    • Я использую unwrap_or , чтобы получить expletive из параметров. Если параметры не установлены, по умолчанию используется «y».
    • Параметр по умолчанию конвертируется из строкового фрагмента ( &str ) в owned() в куче ( String ) при помощи into() .

    Протестируем.

    Упс, ничего особенно не улучшилось. Она даже медленнее, чем версия на Python! Это меня заинтересовало, так что я поискал исходники реализации на C.

    Вот самая первая версия программы, которая вышла в составе Version 7 Unix за почётным авторством Кена Томпсона 10 января 1979 года:

    Сравним со 128-строчной версией из комплекта GNU coreutils, зеркало которого есть на Github. После 25 лет программа всё ещё в активной разработке! Последнее изменение кода произошло около года назад. Она довольно быстрая:

    Читайте также:  Как удалить программный raid windows

    Важная часть находится в конце:

    Ага! Так здесь просто используется буфер для ускорения операций записи. Размер буфера устанавливается постоянной BUFSIZ , которая выбирается для каждой системы, чтобы максимально оптимизировать операции ввода-вывода (см. здесь). На моей системе она была установлена как 1024 байта. В реальности лучшая производительность оказалась при 8192 байтах.

    Я расширил свою программу Rust:

    Здесь важно, чтобы размер буфера делился на четыре, это гарантирует выравнивание в памяти.

    Такая программа выдаёт 51,3 МиБ/с. Быстрее, чем версия, установленная в моей системе, но намного медленнее чем вариант от автора найденного мной поста на Reddit. Он говорит, что добился скорости 10,2 ГиБ/с.

    Дополнение

    Как обычно, сообщество Rust не подкачало. Как только эта статья попала в подреддит о Rust, пользователь nwydo указал на предыдущее обсуждение этой темы. Вот их оптимизированный код, который пробивает 3 ГБ/с на моей машине:

    Так это же совсем другое дело!

    • Мы подготовили заполненный строковый буфер, который будет заново использоваться в каждом цикле.
    • Поток стандартного вывода (stdout) защищён блокировкой. Так что вместо непрерывного захвата и освобождения мы держим его всё время.
    • Используем нативные для платформы std::ffi::OsString и std::borrow::Cow , чтобы избежать ненужных размещений в памяти.

    Единственное, что я могу добавить, так это убрать необязательный mut .

    Извлечённые уроки

    Тривиальная программа yes на самом деле оказалась не такой простой. Для улучшения производительности в ней используется буферизация вывода и выравнивание памяти.

    Переработка стандартных инструментов Unix — увлекательное занятие и оно заставляет ценить те изящные трюки, которые делают наши компьютеры быстрыми.

    Источник

    Как автоматически отвечать на Да или Нет в командах Linux-Unix

    Главное меню » Операционная система Linux » Как автоматически отвечать на Да или Нет в командах Linux-Unix

    Как автоматически отвечать на Да или Нет в командах Linux-Unix

    Метод 1: Повторять да или нет

    Вы могли бы использовать этот метод, вторя да или нет до фактической команды или сценария и размещения трубы «|» между этими двумя командами. Для разработки этой методики покажем пример.

    Допустим, у вас есть пять текстовых файлов в каталоге «/tmp/AndreyEx», как показано ниже.

    Теперь вы хотите удалить все или только один файл «1.txt» в этом каталоге. Ответ прост, команда rm. Однако эта команда попросить да или нет, прежде чем приступить к удалению файла. Как показано ниже:

    В описанном выше способе мы обеспечили ввод «у» для команды rm. Чтобы этого можно было избежать, укажем перед командой rm, как показано ниже:

    Мы сделали автоматический ответ на команду, но есть еще проблема. Команда echo не может использоваться для ответа как непрерывный ответ да или нет на команды. В этой ситуации вам необходимо использовать следующий метод.

    Метод 2: команда yes.

    Да команда является другим вариантом, если вам надо автоматически отвечать Yes или No на команды в Linux-Unix.

    В основном то, что команда yes делает, он непрерывно выводит строки, передаваемые в них или даже передать строку yes в одиночку. Следовательно, мы можем использовать эту возможность для автоматического ответа да или нет в команды Linux/Unix/скрипты. Давайте рассмотрим пример. У нас есть пять файлов, как раньше, и мы хотим удалить все эти файлы, не отвечая на вопрос о подтверждении Да или Нет. Тогда попробуйте ниже метод, который использует команду «Yes».

    Вот то, что произошло, когда команда yes дается непрерывный ответ, как Yes для следующей команды rm. Результат удаления всех файлов без ручного вмешательства. Это не может быть достигнуто с помощью метода эхо-да, поскольку он дает ввод как Да только один раз .

    Способ 3: команда yes с другим входом.

    Допустим, вы не хотите ответы, вместо Да. В этот раз, когда вы хотите ответить no для всех подтверждений, заданные командой. Далее следует ниже пример. Здесь мы не ответили no на все ответы. Следовательно, никакие файлы не были удалены системой.

    Источник

    Оцените статью