Код: Выделить всё
getpriority (PRIO_PGRP, 1005);
Итак, получим несколько процессов. Ниже код, который формирует несколько процессов ОДНОЙ группы. Все процессы работают 3 минуты, кроме процесса с нулевым приоритетом, он сразу отрабатывает. Каждый процесс выводит свой приоритет (случайное число от 0 до 19 и идентификатор группы процессов)
Код: Выделить всё
/* fork01.c */
#include <stdio.h>
#include <sys/resource.h>
//Количество процессов
#define COUNTPROCESS 16
int main (void)
{
//создадим COUNTPROCESS процессов
int i = 0;
for (i = 0; i < COUNTPROCESS; i++)
fork ();
//каждый процесс устанавливает для себя приоритет
setpriority (PRIO_PROCESS, getpid(), getpid()%20);
//получим этот приоритет
int pr = getpriority (PRIO_PROCESS, getpid());
//выведем приоритеты всех процессов и идентификатор группы
//если процесс имеет нулевой приорите, то он прекращает работу,
//остальные работают 3 минуты
if (pr)
{
printf ("getpriority = %d\n", pr);
printf ("getpgrp = %d\n", getpgrp());
sleep (180);
}
return 0;
}
вывод
Код: Выделить всё
user@astra:~$ ./a.out
getpriority = 7
getpgrp = 8727
getpriority = 11
getpgrp = 8727
getpriority = 10
getpgrp = 8727
getpriority = 9
getpgrp = 8727
getpriority = 15
getpriority = 12
getpgrp = 8727
getpriority = 14
getpriority = 13
getpriority = 8
getpgrp = 8727
getpgrp = 8727
getpgrp = 8727
getpgrp = 8727
getpriority = 18
getpgrp = 8727
getpriority = 17
getpgrp = 8727
getpriority = 16
getpgrp = 8727
getpriority = 19
getpriority = 1
getpgrp = 8727
getpgrp = 8727
getpriority = 2
getpgrp = 8727
Итак, запустили все наши процессы, они работают. Найдём среди них процесс с наименьшим приоритетом в математическом смысле. Ниже код:
Код: Выделить всё
/*foo.c*/
#include <sys/resource.h>
#include <stdio.h>
//Здесь мы получаем приоритет процесса, который
//самый низкий в математичесом смысле в группе
int main (int argv, char* argc [])
{
printf ("%d\n", getpriority (PRIO_PGRP, atoi (argc [1])));
}
Код: Выделить всё
uгser@astra:~$ ./foo 8727
0
uгser@astra:~$
+++++++++++++++++++++++++++++++++++++++
код foo хорошо работает с четырьмя процессами, хуже с девятью, ещё хуже с 16-ю. Где он вытаскивает процесс с нулевым приоритетом- ума не приложу. Надеюсь на вашу помощь, друзья! Спасибо, кто откликнется.