Int nice (int incr)
Функция nice позволяет процессу менять свой приоритет. Аргумент команды – величина, которую нужно прибавить к приоритету процесса. В используемой версии QNX эта команда не работает (не меняет приоритета).
Int setprio (pid_t pid, int prio)
Для изменения приоритета процесса можно воспользоваться командой setprio, правда в отличие от команды nice она устанавливает приоритет, а не меняет (прибавляет, отнимает). Для процесса с идентификатором pid устанавливается приоритет prio. Возвращаемое значение – прошлый приоритет.
Int getprio (pid_t pid)
Функция getprio позволяет узнать приоритет процесса – он будет передан в возвращаемом значении. Аргументом является идентификатор процесса, приоритет которого мы хотим узнать.
Текст программы изменения приоритета ch_prio.c.
#include <stdio.h>
main ()
{
int pr, pid;
pid = getpid();
pr=getprio(pid);
printf("Priority is %d\n", pr);
//nice(1);
setprio(pid,9);
pr=getprio(pid);
printf("New priority is %d\n",pr);
}
Результаты испытаний.
С командой nice:
$ ./ch_prio.out
Priority is 10
New priority is 10
С командой setprio:
$ cc -o ch_prio.out ch_prio.c
$ ./ch_prio.out
Priority is 10
New priority is 9
Изменить приоритет удалось лишь командой setprio.
3.3.4. Ознакомьтесь с командой nohup(1). Запустите длительный процесс по nohup(1). Завершите сеанс работы. Снова войдите в систему и проверьте таблицу процессов. Поясните результат.
SIGHUP – это сигнал, посылаемый процессу для уведомления о потере соединения с управляющим терминалом пользователя. Потеря соединения в частности возникает при выходе пользователя из системы. Этот сигнал может быть перехвачен или проигнорирован программой. Игнорирование можно установить, начав выполнять процесс с утилитой nohup. Помимо настройки игнорирования она обеспечивает запуск программы (не в фоновом режиме), перенаправляя весь вывод в файл nohup.out в текущей директории или, если его невозможно создать, в домашнем каталоге пользователя (если и там его невозможно создать, то команда просто не запустится). После потери связи с терминалом программа продолжит выполняться в фоновом режиме.
Запустим длительную программу по nohup, выйдем из системы и снова зайдем.
Текст программы.
#include <stdio.h>
main ()
{
sleep(200);
}
Результаты после выхода из системы и входа в нее по-новому.
$ ps
PID TTY TIME CMD
4411413 ? 00:00:00 pterm
…
4395048 ? 00:00:00 nohup_example.out
4411433 ? 00:00:00 ps
Видно, что процесс продолжает выполняться несмотря на выход из системы.
3.4. Многонитевое функционирование.
3.4.1. Подготовьте программу, формирующую несколько нитей, используя следующий фрагмент кода:
#include <pthread.>h
void* thread1 (void* );
void* thread1 (void* );
pthread_t t1, t2.
Для создания и
запуска нитей воспользуйтесь функциями (для нити n):
pthread_create (&tn, NULL, threadn, NULL);
pthread_join (tn, NULL);
Нити для эксперимента могут быть практически
идентичны.
Каждая нить в цикле: выводит на печать собственное имя и инкрементирует
переменную времени, после чего "засыпает" (sleep(5); sleep(1); - для
первой и второй нитей соответственно).
На экран (в файл) должно выводиться имя нити и количество пятисекундных (для
первой) и секундных (для второй) интервалов функционирования каждой нити.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.