Использование команды nohup
Обычно дочерний процесс прекращается после родительского. Таким образом, если вы запустили фоновый процесс, то он будет прекращен при вашем выходе из системы. Для того чтобы процесс продолжал выполняться даже после вашего выхода из системы, применяется команда nohup. Ее просто следует поместить в начало командной строки. Например:
#nohup sort worknew.dat
Эта простая команда заставляет операционную систему игнорировать ваш выход из нее и продолжать выполнение до тех пор, пока процесс не закончится сам по себе. Таким образом, вы запустите процесс, который может выполняться неделями, не требуя вашего контроля т.е. он окажется без контролирующего терминала (в столбце TTY команды ps –uaxэтого процесса будет стоять знак ?). Поэтому, для того чтобы в дальнейшем «засечь» этот процесс, вам будет необходимо использовать опцию –x к команде ps. Кроме того, при работе с этой командой следует учитывать, что она не переводит запускаемый процесс автоматически в фоновый режим, а при указании в конце строки знака & –вы можете не получить приветствие после нажатия клавиши <Enter>. В этом случае надо просто пару раз нажать на клавишу <> (которая, как вы знаете из Unix’а, – возвращает в командную строку вводимые ранее вами команды) и приветствие вновь появится, либо – можно просто смело вводить новые команды и они будут работать.
Обычно, вывод запущенной с помощьюnohupкоманды перенаправляется в файл nohup.out, о чем система честно предупреждает вас при запуске команды:
#nohup sort worknew.dat
nohup: appending output to ‘nohup.out’
Итак, отсортированный файл и все возможные в процессе работы сообщения об ошибках после окончания работы окажутся в файле nohup.out. Однако, в следующем примере все сообщения об ошибках будут направлены в файл nohup.out, но отсортированный файл окажется помещенным в worknew.srt.
#nohup sort worknew.dat > worknew.srt &
nohup: appending output to ‘nohup.out’
Изменение приоритета команд с помощью nice
Команда nice позволяет запустить другую команду с предопределенным приоритетом выполнения, предоставляя вам, таким образом, возможность задавать приоритет при выполнении своих задач. При обычном запуске, все задачи имеют один и тот же приоритет и ОС равномерно распределяет между ними процессорное время. Однако, с помощью nice вы можете понизить приоритет какой-либо «неспешной» задачи, предоставив тем самым другим задачам больше процессорного времени. Повысить же приоритет той или иной задачи имеет право только администратор.
Синтаксис использования nice следующий:
Nice -смещение command
Уровень приоритета определяется параметром смещение, при этом большее его значение означает меньший приоритет команды. Значение по умолчанию – 10, и смещение представляет собой число, на которое он должен быть уменьшен. Например, если вы запускаете процесс сортировки:
#sort worknew.dat > worknew.srt &
и хотите дать ему преимущество над другим процессом, например, печати, запустите этот второй процесс с уменьшенным приоритетом:
#nice -5 lp mail_list &
Либо, если вы имеете права администратора (в л/р вы их не имеете), то вы можете просто повысить приоритет процесса сортировки, задав ему отрицательное смещение:
#nice -5 sort worknew.dat > worknew.srt &
Самый низкий приоритет будет иметь задача, у которой смещениеравно 19, а самый высокий – -20.
Изменение приоритета работающего процесса с помощью renice
Команда renice позволяет изменить приоритет работающего процесса. Формат этой команды следующий:
Renice number PID
Параметр number представляет собой новое смещение процесса не относительно предыдущего. Для изменения приоритета работающего процесса необходимо знать его идентификатор, получить который можно с помощью рассмотренной ранее команды ps, а при выполнении л/р – лучше, просто, запомнить его при запуске команды в фоновый режим.
Пример
Запустим процесс печати на принтере файла sales.dat с пониженным на 2 приоритетом, а затем понизим его ещё на 3:
#nice -2 lp sales.dat &
[1] 5920
Посмотрим, что выдаст нам команда jobs:
#jobs
[1] + Running nice -2 lp sales.dat &
#renice 5 5920