process_madvise(2)

NUME
process_madvise - oferă sfaturi despre utilizarea memoriei pentru un proces

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#include <sys/mman.h>

ssize_t process_madvise(int pidfd, const struct iovec iovec[.n],
                        size_t n, int advice, unsigned int fanioane);

DESCRIERE
Apelul de sistem process_madvise() este utilizat pentru a da sfaturi sau indicații nucleului cu privire la intervalele de adrese ale unui alt proces sau ale procesului apelant. Acesta oferă sfaturi pentru intervalele de adrese descrise de iovec și n. Scopul acestor sfaturi este de a îmbunătăți performanța sistemului sau a aplicației.

Argumentul pidfd este un descriptor de fișier PID (a se vedea pidfd_open(2)) care specifică procesul căruia trebuie să i se aplice sfatul.

Indicatorul iovec indică o matrice de structuri iovec, descrise în iovec(3type).

n specifică numărul de elemente din matricea de structuri iovec. Această valoare trebuie să fie mai mică sau egală cu IOV_MAX (definită în <limits.h> sau accesibilă prin apelul sysconf(_SC_IOV_MAX)).

Dacă se manipulează un alt proces, sau înainte de Linux 6.13, argumentul advice este una dintre următoarele valori:

MADV_COLD
    A se vedea madvise(2).

MADV_COLLAPSE
    A se vedea madvise(2).

MADV_PAGEOUT
    A se vedea madvise(2).

MADV_WILLNEED
    A se vedea madvise(2).

Începând cu Linux 6.13, atunci când se manipulează procesul apelant, este permis orice fanion de avizare.

Argumentul fanioane este rezervat pentru utilizare viitoare; în prezent, acesta trebuie să fie specificat ca fiind 0.

Argumentele n și iovec sunt verificate înainte de a aplica orice sfat. În cazul în care n este prea mare sau iovec nu este valid, se va returna imediat o eroare și nu se va aplica nici un sfat.

Sfatul ar putea fi aplicat numai unei părți din iovec dacă unul dintre elementele sale indică o regiune de memorie nevalidă în procesul la distanță. Nici un alt element nu va fi procesat dincolo de acest punct; (a se vedea discuția privind recomandările parțiale în secțiunea VALOAREA RETURNATĂ).

Începând cu Linux 5.12, permisiunea de a aplica sfaturi unui alt proces este guvernată de verificarea modului de acces ptrace PTRACE_MODE_READ_FSCREDS (a se vedea ptrace(2)); în plus, din cauza implicațiilor de performanță ale aplicării sfaturilor, apelantul trebuie să aibă capacitatea CAP_SYS_NICE (a se vedea capabilities(7)).

VALOAREA RETURNATĂ
În caz de succes, process_madvise() returnează numărul de octeți recomandat. Această valoare de returnare poate fi mai mică decât numărul total de octeți solicitați, dacă a apărut o eroare după ce unele elemente iovec au fost deja procesate. Apelantul trebuie să verifice valoarea de returnare pentru a determina dacă a avut loc o recomandare parțială.

În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

EBADF
    pidfd nu este un descriptor de fișier PID valid.

EFAULT
    Memoria descrisă de iovec se află în afara spațiului de adrese accesibil al procesului la care se referă pidfd.

EINVAL
    fanioane(flags) nu este 0.

EINVAL
    Suma valorilor iov_len din iovec depășește o valoare ssize_t.

EINVAL
    n este prea mare.

ENOMEM
    Nu s-a putut aloca memorie pentru copiile interne ale structurilor iovec.

EPERM
    Apelantul nu are permisiunea de a accesa spațiul de adrese al procesului pidfd.

ESRCH
    Procesul țintă nu există (adică s-a încheiat și a fost așteptat).

A se vedea madvise(2) pentru erorile specifice advice.

STANDARDE
Linux.

ISTORIC
Linux 5.10, glibc 2.36.

Suportul pentru acest apel de sistem este opțional, în funcție de valoarea opțiunii de configurare CONFIG_ADVISE_SYSCALLS.

Când acest apel de sistem a apărut pentru prima dată în Linux 5.10, permisiunea de a aplica sfaturi unui alt proces era în întregime guvernată de verificarea modului de acces ptrace PTRACE_MODE_ATTACH_FSCREDS (a se vedea ptrace(2)). Această cerință a fost relaxată în Linux 5.12, astfel încât apelantul să nu aibă nevoie de control total asupra procesului țintă.

CONSULTAȚI ȘI
madvise(2), pidfd_open(2), process_vm_readv(2), process_vm_write(2)

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.