Функция getrlimit () возвращает значения мягкого и жесткого пределов заданного ресурса в объекте rlp. Обе функции возвращают значение 0 при успешном завершении и число -1 в противном случае. Пример установки процессом мягкого предела для размера файлов в байтах приведен в листинге 3.4.
Листинг 3.4. Использование функции setrlimit() для установки мягкого предела для размера файлов
#include
struct rlimit R_limit;
struct rlimit R_limit_values;
R_limit.rlim_cur = 2 000;
R_limit.rlim_max = RLIM_SAVED_MAX;
setrlimit (RLIMIT_FSIZE, &R__1 imit);
getrlimit(RLIMIT_FSIZE, &R_limit_values);
cout << «мягкий предел для размера файлов: " << R_limit_values.rlim_cur <
В листинге 3.4 мягкий предел для размера файлов устанавливается равным 2000 байт, а жесткий предел — максимально возможному значению. Функции setrlimit () передаются значения RLIMIT_FSIZE и R_limit, а функции getrlimit () — значения RLIMIT_FSIZE и R_limit_values. После их выполнения на экран выводится установленное значение мягкого предела.
Функция getrusage () возвращает информацию об использовании ресурсов вызывающим процессом. Она также возвращает информацию о сыновнем процессе, завершения которого ожидает вызывающий процесс. Параметр who может иметь следующие значения:
RUSAGE_SELF
RUSAGE_CHILDREN
Если параметру who передано значение RUSAGE_SELF, то возвращаемая информация будет относиться к вызывающему процессу. Если же параметр who содержит значение RUSAGE_CHILDREN, то возвращаемая информация будет относиться к потомку вызывающего процесса. Если вызывающий процесс не ожидает завершения своего потомка, информация, связанная с ним, отбрасывается (не учитывается). Возвращаемая информация передается через параметр r_usage, который указывает на структуру rusage. Эта структура содержит члены, перечисленные и описанные в табл. 3.7. При успешном выполнении функция возвращает число 0, в противном случае — число -1.
Таблица 3.7. Члены структуры rusage
struct timeval ru_utime Время,потраченное пользователем
struct timeval ru_sutime Время,использованное системой
long ru_maxrss Максимальный размер, установленный для резидентной программы
long ru_maxixrss Размер разделяемой памяти
long ru_maxidrss Размер неразделяемой области данных
long ru_maxisrss Размер неразделяемой области стеков
long ru_minflt Количество запросов на страницы
long ru_maj flt Количество ошибок из-за отсутствия страниц
long ru_nswap Количество перекачек страниц
long ru_inblock Блочные операции по вводу данных
long ru_oublock Блочные операции операций по выводу данных
long ru_msgsnd Количество отправленных сообщений
long ru_msgrcv Количество полученных сообщений
long ru_nsignals Количество полученных сигналов
long ru_nvcsw Количество преднамеренных переключений контекста
long ru_nivcsw Количество принудительных переключений контекста
Асинхронные и синхронные процессы
Асинхронные процессы выполняются независимо один от другого. Это означает, что процесс А будет выполняться до конца безотносительно к процессу В. Между асинхронными процессами могут быть прямые родственные («родитель-сын») отношения, а могут и не быть. Если процесс А создает процесс В, они оба могут выполняться независимо, но в некоторый момент родитель должен получить статус завершения сыновнего процесса. Если между процессами нет прямых родственных отношений, у них может быть общий родитель.
Асинхронные процессы могут выполняться последовательно, параллельно или с перекрытием. Эти сценарии изображены на рис. 3.12. В ситуации 1 до самого конца выполняется процесс А, затем процесс В и процесс С выполняются до самого конца. Это и есть последовательное выполнение процессов. В ситуации 2 процессы выполняются одновременно. Процессы А и В - активные процессы. Во время выполнения процесса А процесс В находится в состоянии ожидания. В течение некоторого интервала времени оба процесса пребывают в ждущем режиме. Затем процесс В «просыпается», причем раньше процесса А, а через некоторое время «просыпается» и процесс А, и теперь оба процесса выполняются одновременно. Эта ситуация показывает, что асинхронные процессы могут выполняться одновременно только в течение определенных интервалов времени. В ситуации 3 выполнение процессов А и В перекрывается.
Рис. 3.12. Возможные сценарии асинхронных и синхронных процессов