Пиши Дома Нужные Работы

Обратная связь

Работа в фоне и ликвидация работ.

Давайте начнем с простого примера. Команда yes вроде бы бесполезная команда, посылающая бесконечный поток "y" на стандартный вывод. Но это очень полезно. Если вы направите через конвейер эти "y" на ввод другой команды, которая требует ответов yes и no на вопросы, поток "y" даст подтверждение на все вопросы). Попробуйте:

 

/home/larry# yes

y

y

y

y

y

 

Это закончится в бесконечности. Вы можете убить процесс, нажав клавиши прерывания; обычно это ctrl-C. Чтобы нас больше не раздражал поток нескончаемых y, перенаправим его в /dev/null. Как вы помните, /dev/null выступает в качестве дыры памяти. В ней исчезают бесследно любые данные. Это хороший способ заставить замолчать слишком разговорчивые программы:

 

/home/larry# yes>/dev/null

 

Вот теперь намного лучше. Ничего не печатается, но и подсказка shell не появляется. Это потому, что программа продолжает работать, посылать y в /dev/null. Снова нажмите клавиши прерывания, чтобы прекратить это.

Давайте предположим, что мы хотим, чтобы команда yes продолжала работать, но также хотим получить обратно подсказку shell, чтобы выполнять другие работы. Мы можем перевести команду yes в фоновый режим, что позволит ей выполняться, но без выхода на взаимодействие с пользователем.

Чтобы переместить процесс в фоновый режим, необходимо после команды символ ``&'':

 

/home/larry# yes>/dev/null &

[1] 164

 

/home/larry#

 

Вы видите, что мы вновь получили подсказку. Но что значит ``[1] 164''? И выполняется ли команда yes на самом деле?

``1'' представляет номер работы для программы yes. Shell приписывает номер каждой выполняемой работе. Поскольку yes единственная работа, которая в данный момент выполняется, ей присвоен номер 1. ``164'' идентификатор процесса (PID); это номер, присвоенный системой работе. Любой из этих номеров можно использовать при обращении к работе, как это будет показано в дальнейшем.



Теперь мы имеем выполняемый процесс yes в фоновом режиме, непрерывно посылающий поток "y"-ков в /dev/null. Чтобы проверить состояние этого процесса, используйте внутреннюю команду shell jobs:

 

/home/larry# jobs

[1]+ Running yes>/dev/null &

 

/home/larry#

 

Ясно, что она выполняется. Вы можете также воспользоваться командой ps, показанной ранее, для проверки статуса работ.

Для завершения работы используйте команду kill. Эта команда может брать в качестве аргумента как номер работы, так и идентификатор процесса. Это была работа номер 1, так что используя команду:

 

/home/larry# kill %1

 

мы ликвидируем работу. При идентификации работы по номеру необходимо впереди ставить символ процента (``%'').

Теперь, после ликвидации, мы можем снова использовать jobs для проверки:

 

/home/larry# ]obs

[1]+ Terminated. yes>/dev/null

 

/home/larry#

 

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

Вы можете также убить работу, используя номер идентификатора процесса (PID), который выводится наряду с работой, когда вы начинаете работу (в фоновом режиме). В нашем пример PID равен 164, так что команда:

 

/home/larry# kill 164

 

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

 

/home/larry# kill %1

 

Вам не надо использовать ``%'', когда вы обращаетесь к работе по номеру идентификатора процесса.

Остановка и возобновление работ.

Есть другой способ перевести работу в фоновый режим. Вы можете начать работу нормально (в режиме переднего плана), остановить работу и продолжить в фоновом режиме.

Сначала начнем работу yes "нормально":

/home/larry# yes > /dev/null

Поскольку yes опять выполняется на переднем плане, вы не получите обратно на экран подсказку shell.

Теперь, вместо того, чтобы прерывать работу с помощью ctrl-C, мы остановим работу. Приостановка работы не убивает ее. Чтобы осуществить приостановку работы, надо нажать соответствующие клавиши, обычно это ctrl-Z:

 

/home/larry# yes > /dev/null

ctrl-Z

[1]+ Stopped yes>/dev/null

 

/home/larry#

 

Пока работа остановлена, она просто не выполняется. На нее не тратится время процессора. Но вы всегда можете возобновить работу, и она продолжится как ни в чем не бывало.

Для возобновления работы в режиме переднего плана используйте команду fg (``foreground'': передний план):

 

/home/larry# fg

yes> /dev/null

 

 

Shell снова выдаст на экран имя команды, чтобы вы могли проконтролировать, какую работу вы активизировали в режиме переднего плана. Вновь остановите работу с помощью ctrl-Z. В этот раз используйте команду bg (``background'' (задний план), фоновый режим), чтобы перевести работу в фоновый режим. Эффект будет аналогичен тому, как если бы вы набрали после команды ``&'':

 

/home/larry# bg

[1]+ yes >/dev/null &

 

/home/larry#

 

И мы получили назад подсказку. Команда jobs сообщит, что команда yes действительно выполняется, и мы можем снова ее убить с помощью команды kill (подходящее название, не правда ли?), как мы это уже делали.

Как же теперь остановить работу? Использование ctrl-Z не поможет, поскольку работа находится в фоновом режиме. Ответ: переместить работу на передний план, а затем остановить. Вы можете использовать fg как для остановленных работ, так и для работ, находящихся в фоне.

Существует большая разница между фоновой работой и остановленной. Остановленная работа не выполняется и не использует время процессора, да и никакой работы, честно говоря, в этот момент не делает (но занимает память, хотя по воле свопинга может оказаться на диске). Работа в фоновом режиме и выполняется, и занимает память. Она может даже выводить что-то на экран, хотя это может раздражать вас, когда вы работаете над чем-то другим. Например, если вы использовали команду:

 

/home/larry# yes &

 

без перенаправления stdout в /dev/null, поток y будет выводиться на экран без возможности прервать это (вы не можете использовать ctrl-C для прерывания работ фонового режима). Чтобы остановить эту бесконечную выдачу, вам следует использовать команду fg для перевода работы в режим переднего плана, а затем использовать ctrl-C, чтобы ее убить.

Еще одно замечание. Команды fg и bg обычно переводят на передний план или в фоновый режим работы, которые были остановлены последними (что определяется символом ``+'' после номера работы, это когда вы используете команду jobs). Если вы выполняете много работ одновременно, вы можете перевести на передний план или, наоборот, в фоновый режим конкретную работу заданием идентификатора работы в качестве аргумента команд fg или bg, как в:

 

/home/larry# fg %2

 

(перевод на передний план работы номер 2) или:

 

/home/larry# bg %3

 

(перевод в фон работы номер 3). Для этих команд нельзя использовать идентификаторы процессов. Кроме того, использование только номеров работ, как в:

 

/home/larry# %2

 

эквивалентно:

 

/home/larry# fg %2

 

Помните, что управление работами, это свойство shell. Команды fg, bg и jobs внутренние команды shell. Если по какой-то причине вы используете shell, который не поддерживает управление работами, там вы не найдете этих команд.

В дополнение к этому, есть некоторые аспекты управления работами, которые различаются в Bash и Tcsh. Некоторые оболочки не имеют управления работами, хотя большинство оболочек Linux имеют такую возможность.

 

Использование редактора vi.

 

Текстовый редактор, это программа, используемая для редактирования файлов, которые содержат текст, например письма, С-программы или системные конфигурационные файлы. Хотя в Linux много всяких разных редакторов, единственный редактор, который вы с гарантией найдете в любом UNIX, это vi (``visual editor''). vi не самый простой в использовании редактор. Но поскольку он так распространен в мире UNIX/Linux и в любой момент может вам потребоваться, он заслуживает хоть какого-то описания здесь.

Выбор редактора, это дело персонального вкуса и стиля. Многие пользователи предпочитают витиеватый и мощный Emacs редактор с самым большим набором возможностей, по сравнению со всеми другими редакторами в мире UNIX. Например, Emacs имеет свой собственный встроенный диалект языка программирования LISP и множество расширений (одно из которых, ``Eliza'', в некотором роде программа искусственного интеллекта). Однако, поскольку Emacs со всеми поддерживающими его файлами сравнительно велик, его нет на многих системах. vi, наоборот, маленький и удаленький, но, увы, более сложный в использовании. Но когда вы с ним освоитесь, вы поймете, что он очень простой. Правда осваивать его сложно.

Этот раздел, вразумительное введение в vi. Мы не будем обсуждать все его свойства, а только те, которые вы должны знать, чтобы начать работать. Если вы пожелаете знать больше деталей, обратитесь к страницам Руководства. Если вы хотите изучить его подробнее, почитайте книжку Learning the vi Editor издательства O'Reilly and Associates, или VI Tutorial производства Specialized Systems Consultants (SSC) Inc. См. подробности в приложении A.

Концепции.

При использовании vi в любое время вы можете находиться в одном из трех режимов работы. Эти режимы известны как командный режим, режим вставки и режим последней строки.

Когда вы начинаете работать с vi, вы в командном режиме . Этот режим позволяет использовать определенные команды для редактирования файлов или перехода в другие режимы. Например, напечатав ``x'' при нахождении в командном режиме, удаляете символ, находящийся перед курсором. Стрелки передвигают курсор по редактируемому файлу. Большинство команд, используемых в командном режиме, состоит из одного или двух символов.

Вставку или редактирование текста вы осуществляете в режиме вставки. При использовании vi вы, возможно, большую часть времени находитесь именно в этом режиме. Вы переходите в режим вставки с помощью команды ``i'' (``insert'' вставка) из командного режима. В режиме вставки вы вставляете текст в документ на место, указываемое курсором. Для завершения режима вставки и возврата в командный режим следует нажать Esc.

Режим последней строки, это специальный режим, используемый для расширения возможностей командного режима. При вводе таких команд они появляются в последней строке экрана. Например, если вы напечатаете ``:'' в командном режиме, вы перейдете в режим последней строки и сможете использовать такие команды, как ``wq'' (записать (write) файл и выйти (quit) из vi), или ``q!'' (выйти из vi без сохранения изменений). Режим последней строки в общем случае используется для команд vi, которые длиннее одного символа. В режиме последней строки вы вводите однострочные команды и нажимаете enter для их выполнения.

Запуск vi.

Лучший способ освоить эту концепцию, это вызвать vi и отредактировать файл. В примере ``screens'', приводимом ниже, мы собираемся только показать несколько строк текста, будто бы экран состоит всего из шести строк (вместо двадцати четырех).

Синтаксис для vi:

 

vi filename

 

здесь filename задает имя редактируемого файла.

Запустите vi командой:

 

/home/larry# vi test

 

для редактирования файла test. Вы увидите нечто вроде:

 

"test" [New file]

 

Столбец символов ``~'' говорит о том, что вы стоите на конце файла. Подчеркивание представляет собой курсор.

Вставка текста.

Вы находитесь в командном режиме; для того, чтобы вставлять текст в файл, нажмите i (что переведет вас в режим вставки) и начинайте печатать:

 

Now; is the time for all good. men to come to the aid.

of the party.

 

При вставке текста вы можете напечатать столько строк, сколько пожелаете (нажимая Enter после каждой строки), и можете корректировать ошибки, используя клавишу backspace.

Для завершения режима вставки и возврата в командный режим нажмите Esc.

В командном режиме вы можете использовать клавиши со стрелками для перемещения по файлу. Здесь, поскольку мы имеем только одну строку текста, попытки использовать стрелки "вверх" и "вниз" приведут лишь к тому, что vi на вас загудит.

Есть несколько способов вставки текста, отличных от использования команды i. Например, команда a вставляет в текст, начиная после текущего положения курсора, вместо текущей позиции курсора. Используйте левую стрелку для перемещения курсора между словами ``good'' и ``men''.:

 

Now; is the time for all good_men to come to the aid.

of the party.

 

Нажмите a, для начала режима вставки, напечатайте ``wo'', а затем нажмите esc для возврата в командный режим:

 

Now; is the time for all good, women to come to the aid.

of the party.

 

Для того, чтобы начать вставку текста в строку ниже текущей, используйте команду ``о''. Например, нажмите o и напечатайте строчку или две:

 

Now; is the time for all good, humans to come to the aid of the party.

Afterwards, we'll go out for pizza and beer.

 

Но помните, что в любое время вы находитесь либо в командном режиме (где команды, такие как i, a или o могут применяться) или в режиме вставки (где вы вставляете текст, а затем с помощью esc возвращаетесь в командный режим) или в режим последней строки (в котором вы расширяете расширяемые команды, как это обсуждается ниже).

 

Удаление текста.

В командном режиме команда "x" удаляет символ перед курсором. Если вы нажмете x пять раз, вы окажетесь в ситуации:

 

Now; is the time for all good, humans to come to the aid of the party.

Afterwards, we'll go out for pizza and._

 

Теперь нажмите a, вставьте некоторый текст, а затем нажмите esc:

 

Now; is the time for all good, humans to come to the aid of the party.

Afterwards, we'll go out for pizza and Diet Cohe_

 

Вы можете удалять целые строки, набирая команду dd (т.е. нажимая d дважды). Если ваш курсор на второй строке, и вы напечатали dd:

 

Now; is the time for all good, humans to come to the aid of the party.

 

Чтобы удалить слово, на котором находится курсор, используйте команду dw. Поместите курсор на слово ``good'' и напечатайте dw:

 

Now; is the time for all humans to come to the aid of the party.

 

 

Изменение текста.

Вы можете заменить фрагменты текста, используя команду R. Поместите курсор на первую букву слова ``party'', нажмите R и напечатайте слово ``hungry'':

 

Now; is the time for all humans to come to the aid of the hungry._

 

Использование R для редактирования текста очень походит на на команды i и a, но R заменяет прежний текст вместо вставки в него.

Команда r заменяет один символ, отмеченный курсором. Например, переместите курсор на начало слова ``Now'' и напечатайте r, а следом C, то вы получите:

 

Cow is the time for all humans to come to the aid of the hungry.

 

Команда ``˜'' изменяет размер буквы, отмеченной курсором: большую делает маленькой и наоборот. Например, если вы поместите курсор на ``o'' в ``Cow'' и затем последовательно будете нажимать ~, вы в конечном итоге получите:

 

COW IS THE TIME FOR ALL HUMANS TO COME TO THE AID OF THE HUNGRY.

 

 






ТОП 5 статей:
Экономическая сущность инвестиций - Экономическая сущность инвестиций – долгосрочные вложения экономических ресурсов сроком более 1 года для получения прибыли путем...
Тема: Федеральный закон от 26.07.2006 N 135-ФЗ - На основании изучения ФЗ № 135, дайте максимально короткое определение следующих понятий с указанием статей и пунктов закона...
Сущность, функции и виды управления в телекоммуникациях - Цели достигаются с помощью различных принципов, функций и методов социально-экономического менеджмента...
Схема построения базисных индексов - Индекс (лат. INDEX – указатель, показатель) - относительная величина, показывающая, во сколько раз уровень изучаемого явления...
Тема 11. Международное космическое право - Правовой режим космического пространства и небесных тел. Принципы деятельности государств по исследованию...



©2015- 2024 pdnr.ru Все права принадлежат авторам размещенных материалов.