kill(2)

NUME
 kill- trimite un semnal către un proces

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#include <signal.h>

int kill(pid_t pid, int sig);

    Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

kill():
    _POSIX_C_SOURCE

DESCRIERE
Apelul de sistem kill() poate fi utilizat pentru a trimite orice semnal către orice grup de procese sau proces.

Dacă pid este pozitiv, atunci semnalul sig este trimis către procesul cu ID-ul specificat de pid.

Dacă pid este egal cu 0, atunci sig este trimis la fiecare proces din grupul de procese al procesului apelant.

Dacă pid este egal cu -1, atunci sig este trimis la fiecare proces pentru care procesul apelant are permisiunea de a trimite semnale, cu excepția procesului 1 (init), dar a se vedea mai jos.

Dacă pid este mai mic decât -1, atunci sig este trimis fiecărui proces din grupul de procese al cărui ID este -pid.

Dacă sig este 0, atunci nu se trimite niciun semnal, dar se efectuează în continuare verificări de existență și de permisiune; acest lucru poate fi utilizat pentru a verifica existența unui ID de proces sau a unui ID de grup de procese pe care apelantul este autorizat să le semnalizeze.

Pentru ca un proces să aibă permisiunea de a trimite un semnal, acesta trebuie fie să fie privilegiat (în Linux: să aibă capacitatea CAP_KILL în spațiul de nume al utilizatorului procesului țintă), fie ID-ul de utilizator real sau efectiv al procesului de trimitere trebuie să fie egal cu ID-ul de utilizator real sau salvat al procesului țintă. În cazul lui SIGCONT, este suficient ca procesele de trimitere și de primire să aparțină aceleiași sesiuni; (din punct de vedere istoric, regulile erau diferite; a se vedea ISTORIC).

VALOAREA RETURNATĂ
În caz de succes, este returnat zero. Dacă au fost trimise semnale către un grup de procese, succesul înseamnă că cel puțin un semnal a fost transmis. În caz de eroare, este returnat -1, iar errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

EINVAL
    A fost specificat un semnal nevalid.

EPERM
    Procesul apelant nu are permisiunea de a trimite semnalul către niciunul dintre procesele țintă.

ESRCH
    Procesul sau grupul de procese țintă nu există. Rețineți că un proces existent ar putea fi un proces zombi, un proces care și-a încheiat execuția, dar care nu a fost încă wait(2) (așteptat).

STANDARDE
POSIX.1-2024.

ISTORIC
4.3BSD, SVr4, POSIX.1-1988.

  Note Linux
În diferite versiuni de nucleu, Linux a impus reguli diferite pentru permisiunile necesare pentru ca un proces neprivilegiat să trimită un semnal unui alt proces. În Linux 1.0 până la 1.2.2, un semnal putea fi trimis dacă ID-ul efectiv de utilizator al expeditorului se potrivea cu ID-ul efectiv de utilizator al țintei sau dacă ID-ul real de utilizator al expeditorului se potrivea cu ID-ul real de utilizator al țintei. De la Linux 1.2.3 până la 1.3.77, se putea trimite un semnal dacă ID-ul efectiv de utilizator al expeditorului corespundea fie cu ID-ul real, fie cu ID-ul efectiv de utilizator al țintei. Regulile actuale, care sunt conforme cu POSIX.1, au fost adoptate în Linux 1.3.78.

NOTE
Singurele semnale care pot fi trimise către procesul ID 1, procesul init, sunt cele pentru care init a instalat în mod explicit gestionari de semnal. Acest lucru se face pentru a se asigura că sistemul nu este oprit din greșeală.

POSIX.1 cere ca kill(-1,sig) să trimită sig la toate procesele cărora procesul apelant le poate trimite semnale, cu excepția, eventual, a unor procese de sistem definite de implementare. Linux permite unui proces să se semnalizeze singur, dar pe Linux apelul kill(-1,sig) nu semnalizează procesul apelant.

POSIX.1 prevede că, în cazul în care un proces își trimite un semnal către el însuși, iar firul expeditor nu are semnalul blocat și nici un alt fir nu îl are deblocat sau nu îl așteaptă în sigwait(3), cel puțin un semnal deblocat trebuie să fie livrat firului expeditor înainte ca kill() să se întoarcă.

ERORI
În Linux 2.6 până la Linux 2.6.7 inclusiv, a existat o eroare care făcea ca atunci când se trimiteau semnale către un grup de procese, kill() să eșueze cu eroarea EPERM dacă apelantul nu avea permisiunea de a trimite semnalul către oricare (mai degrabă decât toți) dintre membrii grupului de procese. În pofida acestei erori de returnare, semnalul a fost totuși transmis tuturor proceselor pentru care apelantul avea permisiunea de a transmite semnalul.

CONSULTAȚI ȘI
kill(1), _exit(2), pidfd_send_signal(2), signal(2), tkill(2), exit(3), killpg(3), sigqueue(3), capabilities(7), credentials(7), signal(7)

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.