Изменение приоритетов процессов



Каждому процессу при запуске устанавливается определенный приоритет, который имеет значение от -20 до +20, где +20 - самый низкий. Приоритет нового процесса равен приоритету процесса-родителя. Для изменения приоритета запускаемой программы существует команда nice. Пример ее использования:

nice [- adnice] command [args]

где adnice— значение (от –20 до +19), добавляемое к значению niceпроцесса-родителя. Отрицательные значения может устанавливать только суперпользователь. Если опцияadnice не задана, то по умолчанию для процесса-потомка устанавливается значение nice, увеличенное на 10 по сравнению со значением nice родительского процесса. Опция –n используется для установки значения приоритета.

Пример: nice -n 19 dd

Команда renice служит для изменения значения nice для уже выполняющихся процессов. Суперпользователь может изменить приоритет любого процесса в системе. Другие пользователи могут изменять значение приоритета только для тех процессов, для которых данный пользователь является владельцем. При этом обычный пользователь может только уменьшить значение приоритета. Поэтому процессы с низким приоритетом не могут породить "высокоприоритетных детей".

Пример: renice +20 -u peter

процессы пользователя peter получат наименьший приоритет и не будут затруднять работу процессов других пользователей.

Отправка сигналов процессам

Команда

 kill -СИГНАЛ PID

 

отправляет процессу с идентификатором PID указанный сигнал. Сигнал указывается либо в символьной форме (за вычетом приставки 'SIG'), либо в виде номера сигнала. Например, "kill -HUP PID" и "kill -1 PID" (цифра "один") - одно и то же. Список всех сигналов и их номеров можно просмотреть командой kill -l (буква "эль"). По умолчанию, если сигнал не указан, посылается сигнал SIGTERM (номер 15).

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

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

Пример выполнения команды  kill -l

1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR

 

Порядок выполнения работы

Выполните в командной строке ОС семейства UNIX перечисленные ниже действия. Протоколируйте процесс выполнения (с помощь скриншотов или записывая команды) и представьте их в отчете.

 

1. Просмотрите список всех загруженных модулей.

2. Запустите процесс ls в фоновом режиме.

3. Запустите процесс ls в режиме демона.

4. Перенаправьте поток вывода команды ls в файл test и просмотрите его.

5. Перенаправьте поток вывода команд «ls –l» и «ls –l /proc» в файл test с его дозаписью. Просмотрите этот файл

6. Изучите список всех запущенных в вашей системе процессов.

7. Определите, какой  процесс истратил больше всего процессорного времени.

8. Определите, какой процесс занимает больше всего памяти.

9. Определите, сколько демонов и зомби запущено в системе.

10. Определите количество свободной и используемой в системе памяти.

11. Получите дерево процессов.

12. Запустите два процесса (например, find и sort) в фоновом режиме (c подавлением потоков вывода), и два (например, ps и cat) - в интерактивном.

 find / 2>/dev/null | sort >/dev/null 2>&1 &

 ps -ej | cat

 

Выпишите из листинга команды ps строки, относящиеся к четырем выше указанным процессам. Найдите идентификаторы группы и сеанса для каждого процесса, определите лидеров групп и сеанса.

Проверьте, работают ли запущенные процессы:

ps -fu ваш_пользователь

Закройте терминал. Вновь откройте и проверьте, какие процессы остались с прошлого сеанса.

13.  Пошлите сигнал SIGTERM процессу find (если он еще работает, иначе предварительно запустите его). Убедитесь, что find исчез из списка процессов.

14. Пошлите какой-нибудь сигнал любому процессу, которым вы не владеете.

15. Найдите номер процесса своего shellа и отправьте ему сигнал SIGHUP.

 

3. Контрольные вопросы

1. Как происходит порождение процессов?

2. Какие функции выполняет процесс init?

3. Могут ли родственные процессы разделять общую память?

4. Каким образом может быть порожден новый процесс? Какова структура нового процесса?

5. В каких состояниях может находиться процесс?

6. Какими процессами в системе могут управлять пользователи?

7. Для чего используется фоновый режим?

8.  Как можно перевести программу в фоновый режим?

9. Какая информация о процессах выводится при использовании команды ps?

10. Для чего используются сигналы в ОС UNIX?

11. В каких случаях следует принудительно завершить процесс?

 


Дата добавления: 2018-04-05; просмотров: 692; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!