П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 182403 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 81878 раз(а).

Учебник HTML.
Просмотров 76911 раз(а).

Руководство по PHP5.
Просмотров 47892 раз(а).

Хостинг через призму DNS.
Просмотров 55485 раз(а).

Подборка текстов стандартных документов.
Просмотров 47349 раз(а).

Учебник PHP - Самоучитель
Просмотров 53841 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 54552 раз(а).

Внешние атаки...
Просмотров 44141 раз(а).

Учебник PHP.
Просмотров 39473 раз(а).

SSI в примерах.
Просмотров 29334 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





3.2. Группировка команд.

Средства группировки:
; и
<перевод строки>
определяют последовательное выполнение команд;
& асинхронное (фоновое) выполнение предшествующей команды;
&& выполнение последующей команды при условии нормального завершения предыдущей, иначе игнорировать;
|| выполнение последующей команды при ненормальном завершении предыдущей, иначе игнорировать.

При выполнении команды в асинхронном режиме (после команды стоит один амперсанд) на экран выводится номер процесса, соответствующий выполняемой команде, и система, запустив этот фоновый процесс, вновь выходит на диалог с пользователем.

Например, наберем (экзотическую) команду "find" в фоновом режиме для поиска в системе , начиная от корня "/", файла с именем "conf", а затем "pwd" в обычном режиме. На экране этот фрагмент будет выглядеть следующим образом:

--------------------------------
| $ find / -name conf -print & | ввод команды "find"
|                              |
| 288                          | номер (PID) фонового процесса
|                              |
| $ pwd                        | ввод команды "pwd"
|                              |
| /mnt/lab/asu                 | результат работы "pwd"
|                              |
| $                            | возвращение shell в промптер
|                              |
| /usr/include/sys/conf        | результат работы "find"
|                              |
--------------------------------

Иногда необходимо, чтобы все фоновые процессы завершились, прежде чем будет выполняться какой-то расчет. Для этого служит специальная команда "wait [PID]". Эта команда ждет завершения указанного идентификатором (числом) фонового процесса. Если команда без параметра, то она ждет завершения всех фоновых процессов, дочерних для данного "sh".

Для группировки команд также могут использоваться фигурные "{}" и круглые "()" скобки. Рассмотрим примеры, сочетающие различные способы группировки: Если введена командная строка

    k1 && k2; k3

где k1, k2 и k3 - какие-то команды, то "k2" будет выполнена только при успешном завершении "k1"; после любого из исходов обработки "k2" (т.е. "k2" будет выполнена, либо пропущена) будет выполнена "k3".

    k1 && {k2; k3}
Здесь обе команды ("k2" и "k3") будут выполнены только при успешном завершении "k1".
    {k1; k2} &

В фоновом режиме будет выполняться последовательность команд "k1" и "k2".

Фоновые процессы (как и теневую экономику) сложно уничтожить, поскольку традиционная команда "CTL/C" прерывает только процессы переднего плана. Для уничтожения фонового процесса надо знать его номер. При запуске фонового процесса на экран выдается число, соответствующее номеру (идентификатору) этого процесса (PID). Если этот номер забыт или надо убедиться, что этот процесс не закончен, с помощью команды

	ps -aux

можно получить перечень идентификаторов процессов (PID), имена пользователей, текущее время, затраченное процессами, и т.д.

В выведенной таблице можно найти номера процессов, подлежащих уничтожению, например это "849" и "866". Тогда командой

	kill -9  866 849

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

ПРЕДУПРЕЖДЕНИЕ. Если параллельно обрабатывается или создается файл с ОДНИМ именем (например, несколько пользователей вызвали в редактор один и тот же файл), то в системе продолжит существование тот вариант файла, который возвращен (записан) в систему последним. Это частая ошибка пользователей персональных компьютеров, которые редактируют один файл параллельно с нескольких экранов.

Круглые скобки "()", кроме выполнения функции группировки, выполняют и функцию вызова нового экземпляра интерпретатора shell.

Пусть мы находились в начальном каталоге "/mnt/lab/asu"

Тогда в последовательности команд

    cd ..; ls; ls
две команды "ls" выдадут 2 экземпляра содержимого каталога "/mnt/lab", а последовательность
   (cd ..; ls) ls
выдаст сначала содержимое каталога "/mnt/lab", а затем содержимое "/mnt/lab/asu", т.к. при входе в скобки вызывается новый экземпляр shell, в рамках которого и осуществляется переход. При выходе из круглых скобок происходит возврат в старый shell и в старый каталог.

[Назад] [Содержание] [Вперед]



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту: