Изучение основных принципов управления процессами и нитями в ОС LINUX, страница 7

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); - для первой и второй нитей соответственно).
На экран (в файл) должно выводиться имя нити и количество пятисекундных (для первой) и секундных (для второй) интервалов функционирования каждой нити.