.\" .\" Copyright (c) 2020-2023 Jim Warner .\" Copyright (c) 2020-2023 Craig Small .\" .\" This manual is free software; you can redistribute it and/or .\" modify it under the terms of the GNU Lesser General Public .\" License as published by the Free Software Foundation; either .\" version 2.1 of the License, or (at your option) any later version. .\" .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH PROCPS_PIDS 3 "серпень 2022 року" libproc2 .\" Please adjust this date whenever revising the manpage. .\" .nh .SH НАЗВА procps_pids — програмний інтерфейс для доступу до даних процесів у файловій системі /proc .SH "КОРОТКИЙ ОПИС" .nf #include int\fB procps_pids_new \fP (struct pids_info **\fIinfo\fP, enum pids_item *\fIitems\fP, int \fInumitems\fP); int\fB procps_pids_ref \fP (struct pids_info *\fIinfo\fP); int\fB procps_pids_unref\fP (struct pids_info **\fIinfo\fP); struct pids_stack *\fBprocps_pids_get\fP ( struct pids_info *\fIinfo\fP, enum pids_fetch_type \fIwhich\fP); struct pids_fetch *\fBprocps_pids_reap\fP ( struct pids_info *\fIinfo\fP, enum pids_fetch_type \fIwhich\fP); struct pids_fetch *\fBprocps_pids_select\fP ( struct pids_info *\fIinfo\fP, unsigned *\fIthese\fP, int \fInumthese\fP, enum pids_select_type \fIwhich\fP); struct pids_stack **\fBprocps_pids_sort\fP ( struct pids_info *\fIinfo\fP, struct pids_stack *\fIstacks\fP[], int \fInumstacked\fP, enum pids_item \fIsortitem\fP, enum pids_sort_order \fIorder\fP); int \fBprocps_pids_reset\fP ( struct pids_info *\fIinfo\fP, enum pids_item *\fInewitems\fP, int \fInewnumitems\fP); struct pids_stack *\fBfatal_proc_unmounted\fP ( struct pids_info *\fIinfo\fP, int \fIreturn_self\fP); .fi Компонувати з \fI\-lproc2\fP. .SH ОПИС .SS Огляд Центральною для цього інтерфейсу є проста структура «result», яка визначає «item» і його значення (в об'єднання зі стандартними типами мови C, як учасниками). Усі структури «result» буде автоматично розподілено і надано бібліотекою. Заданням масиву значень «item» ці структури можна упорядкувати як «стек» із потенційним отримання багатьох результатів одним викликом функції. Таким чином, «стек» можна розглядати як запис змінної довжини, вміст якого та порядок записів у якому визначаються лише користувачем. Частиною цього інтерфейсу є два унікальних лічильники. Для зберігання їхніх значень передбачено записи «noop» та «extra». Їхні значення ніколи не встановлюються бібліотекою, але результат «extra» буде занулено на початку кожної взаємодії із бібліотекою. Базовим документом при розробці користувацької програми буде файл заголовків pids.h. Там ви знайдете усі доступні записи (item), тип, який вони повертають (назву члена структури «result») і джерело для таких значень. Також там наведено документацію щодо додаткових лічильників та структур. .SS Користування Нижче наведено типову послідовність викликів цього інтерфейсу. .nf 1. \fBfatal_proc_unmounted()\fP 2. \fBprocps_pids_new()\fP 3. \fBprocps_pids_get()\fP, \fBprocps_pids_reap()\fP або \fBprocps_pids_select()\fP 4. \fBprocps_pids_unref()\fP .fi Функція \fBget\fP є ітератором для послідовних PID/TID, що повертає ці «items», раніше вказані за допомогою \fBnew\fP або \fBreset\fP. Для непередбачуваних результатів для змінних передбачено дві функції. Функція \fBreap\fP збирає дані для усіх процесів, а функція \fBselect\fP працює зі специфічними PID та UID. Обидві можуть повертати декілька «стеків», кожне з яких містить декілька структур «result». Крім того, користувач може наказати \fBупорядкувати\fP (\fBsort\fP) ці результати. Щоб скористатися будь\-яким «stack» і отримати доступ до окремих структур «result», потрібен \fIrelative_enum\fP, як це показано у макросі \fBVAL\fP, який визначено у файлі заголовка. ТАкі значення можна запрограмувати як: значення від 0 до numitems\-1. Втім, цю потребу типово можна задовольнити створенням ваших власних лічильників, які відповідають порядку у масиві «items». .SS Застереження Програмний інтерфейс відрізняється від інших тим, що потрібні записи має бути надано під час виконання \fBnew\fP або \fBreset\fP, останній варіант є унікальним для цього програмного інтерфейсу. Якщо якийсь із параметрів, \fIitems\fP або \fInumitems\fP, є нульовим на час \fBnew\fP, обов'язковим перед надсиланням будь\-якого іншого виклику стає \fBreset\fP. Для функцій \fBnew\fP і \fBunref\fP має бути надано адресу вказівник структури \fIinfo\fP. Із \fBnew\fP її має бути ініціалізовано значенням NULL. Із \fBunref\fP її буде скинуто до NULL, якщо контрольний відлік дійде до нуля. Функції \fBget\fP і \fBreap\fP використовують параметр \fIwhich\fP для визначення того, слід отримувати дані лише для завдань чи для завдань і потоків обробки. Функція \fBselect\fP потребує масиву PID або UID, як \fIthese\fP разом із \fInumthese\fP, для визначення того, дані яких процесів слід отримати. Далі, ця функція працює із підмножиною \fBreap\fP. Якщо використано функцію \fBsort\fP, зазвичай, буде повернуто параметри \fIstacks\fP і \fInumstacked\fP у структурі «pids_fetch». Нарешті, можна викликати функцію \fBfatal_proc_unmounted\fP до будь\-якої іншої функції для забезпечення монтування каталогу /proc/. Якщо каталог змонтовано, параметр \fIinfo\fP матиме значення NULL, а параметр \fIreturn_self\fP матиме нульове значення. Якщо, втім, деякі записи потрібні для запуску програми (\fIreturn_self\fP відмінне від нуля), виклик \fBnew\fP має передувати виклику цієї функції для того, щоб вказати \fIitems\fP і отримати потрібний вказівник \fIinfo\fP. .SH "ПОВЕРНУТЕ ЗНАЧЕННЯ" .SS "Функції, які повертають «int»" На помилку вказуватиме від'ємне число, яке є завжди оберненим до якогось відомого значення з errno.h. На успіх вказує нульовий стан повернення. Втім, функції \fBref\fP і \fBunref\fP повертають поточний контрольний відлік структури \fIinfo\fP. .SS "Функції, які повертають «address»" На помилку вказуватиме повернутий NUL\-вказівник із повідомлення про причину у формальному значенні errno. На успіх вказує повернення вказівника на іменовану структуру. Втім, якщо щось переживе виклик \fBfatal_proc_unmounted\fP, NULL завжди буде повернуто, якщо значенням \fIreturn_self\fP є нуль. .SH ДІАГНОСТИКА Щоб полегшити розробку програм, передбачено дві можливості procps\-ng, якими можна скористатися. Першою є файл із назвою «libproc.supp», яким можна скористатися при розробці \fIбагатопотокової\fP програми. Якщо скористатися ним у поєднанні із параметром valgrind «\-\-suppressions=», можна уникнути виведення попереджень, які пов'язано із самою бібліотекою procps. Такі попередження виникають через те, що бібліотека обробляє засновані на «купі» функції отримання пам'яті у безпечний щодо потоків обробки спосіб. \fIОднопотокові\fP програми не призводитимуть до появи таких попереджень. Друга функція може допомогти забезпечити узгодженість посилань на члени «result» із очікуваннями бібліотеки. У цій функції передбачено, що наданий макрос у файлі заголовків буде використано для доступу до значення «result». Цю можливість можна активувати за допомогою будь\-якого з вказаних нижче методів, а усі розбіжності буде записано до \fBstderr\fP. .IP 1) 3 Додайте CFLAGS='\-DXTRA_PROCPS_DEBUG' до будь\-яких інших застосованих у вашому проєкті параметрів ./configure. .IP 2) 3 Додайте #include у програму \fIпісля\fP #include . .PP Використання цієї можливості перевірки призводить до суттєвих обчислювальних витрат. Через це, важливо \fIне\fP вмикати її під час остаточного збирання або збирання програми для випуску. .SH "ЗМІННІ СЕРЕДОВИЩА" Встановлене значення є несуттєвим, достатнього самого факту його встановлення. .IP LIBPROC_HIDE_KERNEL Призведе до приховування потоків обробки ядра, які інакше було б повернуто викликом \fBprocps_pids_get\fP, \fBprocps_pids_select\fP або \fBprocps_pids_reap\fP. .SH "ТАКОЖ ПЕРЕГЛЯНЬТЕ" \fBprocps\fP(3), \fBprocps_misc\fP(3), \fBproc\fP(5).