kill(2) System Calls Manual kill(2) NUME kill - trimite un semnal catre un proces BIBLIOTECA Biblioteca C standard (libc, -lc) REZUMAT #include int kill(pid_t pid, int sig); Cerine pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultai feature_test_macros(7)): kill(): _POSIX_C_SOURCE DESCRIERE Apelul de sistem kill() poate fi utilizat pentru a trimite orice semnal catre orice grup de procese sau proces. Daca pid este pozitiv, atunci semnalul sig este trimis catre procesul cu ID-ul specificat de pid. Daca pid este egal cu 0, atunci sig este trimis la fiecare proces din grupul de procese al procesului apelant. Daca pid este egal cu -1, atunci sig este trimis la fiecare proces pentru care procesul apelant are permisiunea de a trimite semnale, cu excepia procesului 1 (init), dar a se vedea mai jos. Daca pid este mai mic decat -1, atunci sig este trimis fiecarui proces din grupul de procese al carui ID este -pid. Daca sig este 0, atunci nu se trimite niciun semnal, dar se efectueaza in continuare verificari de existena i de permisiune; acest lucru poate fi utilizat pentru a verifica existena unui ID de proces sau a unui ID de grup de procese pe care apelantul este autorizat sa le semnalizeze. Pentru ca un proces sa aiba permisiunea de a trimite un semnal, acesta trebuie fie sa fie privilegiat (in Linux: sa aiba capacitatea CAP_KILL in spaiul de nume al utilizatorului procesului inta), fie ID-ul de utilizator real sau efectiv al procesului de trimitere trebuie sa fie egal cu ID-ul de utilizator real sau salvat al procesului inta. In cazul lui SIGCONT, este suficient ca procesele de trimitere i de primire sa aparina aceleiai sesiuni; (din punct de vedere istoric, regulile erau diferite; a se vedea NOTE). VALOAREA RETURNATA In caz de succes (cel puin un semnal a fost trimis), se returneaza zero. In caz de eroare, se returneaza -1, iar errno este configurata pentru a indica eroarea. ERORI-IEIRE EINVAL A fost specificat un semnal nevalid. EPERM Procesul apelant nu are permisiunea de a trimite semnalul catre niciunul dintre procesele inta. ESRCH Procesul sau grupul de procese inta nu exista. Reinei ca un proces existent ar putea fi un proces zombi, un proces care i-a incheiat execuia, dar care nu a fost inca wait(2) (ateptat). STANDARDE POSIX.1-2008. ISTORIC POSIX.1-2001, SVr4, 4.3BSD. Note Linux In diferite versiuni de nucleu, Linux a impus reguli diferite pentru permisiunile necesare pentru ca un proces neprivilegiat sa trimita un semnal unui alt proces. In Linux 1.0 pana la 1.2.2, un semnal putea fi trimis daca ID-ul efectiv de utilizator al expeditorului se potrivea cu ID-ul efectiv de utilizator al intei sau daca ID-ul real de utilizator al expeditorului se potrivea cu ID-ul real de utilizator al intei. De la Linux 1.2.3 pana la 1.3.77, se putea trimite un semnal daca 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 in Linux 1.3.78. NOTE Singurele semnale care pot fi trimise catre procesul ID 1, procesul init, sunt cele pentru care init a instalat in mod explicit gestionari de semnal. Acest lucru se face pentru a se asigura ca sistemul nu este oprit din greeala. POSIX.1 cere ca kill(-1,sig) sa trimita sig la toate procesele carora procesul apelant le poate trimite semnale, cu excepia, eventual, a unor procese de sistem definite de implementare. Linux permite unui proces sa se semnalizeze singur, dar pe Linux apelul kill(-1,sig) nu semnalizeaza procesul apelant. POSIX.1 prevede ca, in cazul in care un proces ii trimite un semnal catre el insui, iar firul expeditor nu are semnalul blocat i nici un alt fir nu il are deblocat sau nu il ateapta in sigwait(3), cel puin un semnal deblocat trebuie sa fie livrat firului expeditor inainte ca kill() sa se intoarca. ERORI In Linux 2.6 pana la Linux 2.6.7 inclusiv, a existat o eroare care facea ca atunci cand se trimiteau semnale catre un grup de procese, kill() sa eueze cu eroarea EPERM daca apelantul nu avea permisiunea de a trimite semnalul catre oricare (mai degraba decat toi) dintre membrii grupului de procese. In pofida acestei erori de returnare, semnalul a fost totui transmis tuturor proceselor pentru care apelantul avea permisiunea de a transmite semnalul. CONSULTAI 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 in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.06 31 octombrie 2023 kill(2)