Средства группировки:
При выполнении команды в асинхронном режиме (после команды стоит один амперсенд) на экран выводится номер процесса, соответствующий выполняемой команде, и система, запустив этот фоновый процесс, вновь выходит на диалог с пользователем.
Например, наберем (экзотическую) команду "find" в фоновом режиме для поиска в системе , начиная от корня "/", файла с именем "conf", а затем "pwd" в обычном режиме. На экране этот фрагмент будет выглядеть следующим образом:
-------------------------------- | $ find / -name conf -print & | ввод команды "find" | | | 288 | номер (PID) фонового процесса | | | $ pwd | ввод команды "pwd" | | | /mnt/lab/asu | результат работы "pwd" | | | $ | возвращение shell в промптер | | | /usr/include/sys/conf | результат работы "find" | | --------------------------------
Для группировки команд также могут использоваться фигурные "{}" и круглые "()" скобки. Рассмотрим примеры, сочетающие различные способы группировки:
Если введена командная строка
k1 && k2; k3
k1 && {k2; k3}
{k1; k2} &
Фоновые процессы (как и теневую экономику) сложно уничтожить, поскольку традиционная команда "CTL/C" прерывает только процессы переднего плана. Для уничтожения фонового процесса надо знать его номер. При запуске фонового процесса на экран выдается число, соответствующее номеру (идентификатору) этого процесса (PID). Если этот номер забыт или надо убедиться, что этот процесс не закончен, с помощью команды:
ps -aux
В выведенной таблице можно найти номера процессов, подлежащих уничтожению, например это "849" и "866". Тогда командой:
kill -9 866 849
ПРЕДУПРЕЖДЕНИЕ. Если параллельно обрабатывается или создается файл с ОДНИМ именем (например, несколько пользователей вызвали в редактор один и тот же файл), то в системе продолжит существование тот вариант файла, который возвращен (записан) в систему последним. Это частая ошибка пользователей персональных компьютеров, которые редактируют один файл параллельно с нескольких экранов.
Круглые скобки "()", кроме выполнения функции группировки, выполняют и функцию вызова нового экземпляра интерпретатора shell.
Пусть мы находились в начальном каталоге "/mnt/lab/asu" Тогда в последовательности команд:
cd ..; ls; ls
(cd ..; ls) ls