focal (7) signal.7.gz

Provided by: manpages-pl_0.7-2_all bug

NAZWA

       signal - przegląd sygnałów

OPIS

       Linux  wspiera  zarówno  rzeczywiste  sygnały  POSIX-owe  (zwane  dalej "sygnałami standardowymi"), jak i
       sygnały POSIX-owe czasu rzeczywistego.

   Zachowania sygnału
       Każdy sygnał ma przypisane bieżące zachowanie, które określa reakcję procesu na dostarczony sygnał.

       Wpisy w kolumnie  "Akcja"  tabeli  określają  domyślne  zachowanie  dla  danego  sygnału,  jako  jedno  z
       następujących:

       Term   Domyślną akcją jest przerwanie procesu.

       Ign    Domyślną akcją jest zignorowanie sygnału.

       Core   Domyślną akcją jest przerwanie procesu i zapisanie obrazu pamięci (patrz core(5)).

       Stop   Domyślną akcją jest zatrzymanie procesu.

       Cont   Domyślną akcją jest kontynuowanie procesu, jeżeli jest obecnie zatrzymany.

       Proces  może  zmienić  zachowanie  się sygnału, używając sigaction(2) lub signal(2) (to drugie jest mniej
       przenośne, jeśli chodzi o ustawianie akcji obsługi sygnału; szczegóły opisano w signal(2)). Używając tych
       wywołań  systemowych,  proces  może  wybrać  jedną  z poniższych reakcji na dostarczenie sygnału: wykonać
       domyślną akcję, zignorować sygnał, przejąć sygnał wykonując akcję obsługi  sygnału,  czyli  podaną  przez
       programistę  funkcję,  wywoływaną  automatycznie  po  dostarczeniu  sygnału  (Domyślnie procedura obsługi
       sygnału jest uruchamiana na normalnym stosie procesu.  Można  to  zmienić,  tak  żeby  używany  był  stos
       alternatywny; szczegóły, jak i po co to robić, można znaleźć w sigaltstack(2)).

       Zachowanie  sygnału  jest  atrybutem poszczególnych procesów: w aplikacji wielowątkowej zachowanie danego
       sygnału jest takie samo dla wszystkich wątków.

       Dziecko utworzone przez fork(2) dziedziczy kopię ustawień sygnałów od swojego rodzica. Podczas  wywołania
       execve(2)  przywracane  są  wartości domyślne ustawień, z wyjątkiem ustawienia ignorowania sygnału, które
       nie jest zmieniane.

   Wysyłanie sygnału
       Następujące wywołania systemowe lub funkcje biblioteczne umożliwiają wysyłanie sygnałów:

       raise(3)        Wysyła sygnał do wątku, który wywołał tę funckję.

       kill(2)         Wysyła sygnał do podanego procesu lub do wszystich członków podanej grupy  procesów,  lub
                       do wszystkich procesów w systemie.

       killpg(2)       Wysyła sygnał do wszystkich członków podanej grupy procesów.

       pthread_kill(3) Wysyła sygnał do podanego wątku POSIX w tym samym procesie, co proces wywołujący.

       tgkill(2)       Wysyła  sygnał do podanego wątku w podanym procesie (Jest to używane do zaimplementowania
                       pthread_kill(3)).

       sigqueue(3)     Wysyła sygnał czasu rzeczywistego wraz z powiązanymi danymi do podanego procesu.

   Oczekiwanie na przechwycenie sygnału
       Następujące wywołania systemowe zawieszają wykonywanie wywołującego  je  procesu  lub  wątku  do  momentu
       obsłużenia sygnału (lub do momentu, w którym nieobsłużony sygnał spowoduje zakończenie procesu).

       pause(2)        Zawiesza wykonywanie do momentu złapania sygnału.

       sigsuspend(2)   Tymczasowo  zmienia  maskę  sygnału  (patrz  niżej)  i  zawiesza  wykonywanie  do momentu
                       przechwycenia  jednego z niemaskowanych sygnałów.

   Synchroniczne akceptowanie sygnału
       Zamiast asynchronicznego przechwytywania sygnału przez procedurę jego obsługi, możliwe jest synchroniczne
       akceptowanie  sygnałów,  czyli blokowanie wykonywania do czasu dostarczenia sygnału, w którym to momencie
       jądro zwraca informacje o sygnale do funkcji wywołującej. W ogólności można to zrobić na dwa sposoby:

       * sigwaitinfo(2), sigtimedwait(2) oraz sigwait(3) zawieszają wykonanie aż do chwili dostarczenia  jednego
         z sygnałów należącego do podanego zbioru sygnałów. Każde z tych wywołań systemowych zwraca informacje o
         dostarczonym sygnale.

       * signalfd(2)  zwraca  deskryptor  pliku,  którego  można  użyć  do  odczytania  informacji  o  sygnałach
         dostarczanych  do  procesu  wywołującego.  Każda  operacja odczytu za pomocą read(2) z tego deskryptora
         pliku jest blokowana do czasu dostarczenia do programu wywołującego jednego z sygnałów  przekazanych  w
         zbiorze signalfd(2). Bufor zwracany przez read(2) zawiera strukturę opisującą sygnał.

   Maska sygnału i sygnały oczekujące
       Sygnał może być zablokowany, co oznacza, że nie zostanie dostarczony, dopóki się go nie odblokuje. Sygnał
       jest nazywany oczekującym, jeżeli został już wygenerowany, ale nie został jeszcze dostarczony.

       Każdy wątek procesu ma swoją niezależną maskę sygnałów, określającą zbiór  sygnałów  obecnie  blokowanych
       przez  wątek.  Wątek  może zmieniać maskę sygnałów, używając pthread_sigmask(3). Tradycyjna, jednowątkowa
       aplikacja może do tego celu użyć sigprocmask(2).

       Dziecko utworzone  przez  fork(2)  dziedziczy  kopię  maski  sygnałów  od  swojego  rodzica.  Maska  jest
       zachowywana podczas wywołań execve(2).

       Sygnał  może  być  wygenerowany  (i  w związku z tym oczekujący) dla procesu jako całości (np. wysłany za
       pomocą kill(2)) lub dla  określonego  wątku  (np.  niektóre  sygnały,  takie  jak  SIGSEGV  lub  SIGPFPE,
       generowane  w konsekwencji użycia określonej instrukcji języka maszynowego oraz sygnały wysłane za pomocą
       pthread_kill(2), są  skierowane  do  wątku).  Sygnał  skierowany  do  procesu  może  być  dostarczony  do
       któregokolwiek  z  jego wątków, który nie blokuje tego sygnału. Jeżeli więcej niż jeden wątek nie blokuje
       sygnału, to jądro dostarczy sygnał do przypadkowo wybranego wątku.

       Wątek może pobrać zbiór obecnie oczekujących sygnałów, używając sigpending(2). Zbiór ten będzie  zawierał
       sygnały oczekujące skierowane zarówno do całego procesu, jak i do wywołującego wątku.

       Zbiór  sygnałów  oczekujących  dziecka  utworzonego przez fork(2) jest na samym początku pusty. Zbiór ten
       jest zachowywany podczas execve(2).

   Sygnały standardowe
       Linux  obsługuje  wymienione  poniżej  sygnały  standardowe.  Numery  niektórych   sygnałów   zależą   od
       architektury,  co  pokazano  w  kolumnie  "Wartość".  Jeżeli  podano trzy wartości, to zazwyczaj pierwsza
       obowiązuje dla architektur alpha i sparc, środkowa dla  x86,  arm  i  większości  innych  architektów,  a
       ostatnia dla mips. Znak - oznacza, że sygnał dla danej architektury nie występuje.

       Najpierw sygnały opisane w pierwotnym standardzie POSIX.1-1990

       Sygnał    Wartość    Akcja   Komentarz
       ───────────────────────────────────────────────────────────────────────
       SIGHUP        1      Term    Zawieszenie wykryte na terminalu kontrol.
                                    lub śmierć procesu kontrolującego
       SIGINT        2      Term    Przerwanie nakazane z klawiatury
       SIGQUIT       3      Core    Wyjście nakazane z klawiatury
       SIGILL        4      Core    Nielegalna instrukcja
       SIGABRT       6      Core    Sygnał abort od abort(3)
       SIGFPE        8      Core    Wyjątek zmiennoprzecinkowy
       SIGKILL       9      Term    Sygnał Kill
       SIGSEGV      11      Core    Nieprawidłowa referencja pamięciowa
       SIGPIPE      13      Term    Uszkodzony potok: zapis do potoku bez
                                    odbiorców
       SIGALRM      14      Term    Sygnał timera od alarm(2)
       SIGTERM      15      Term    Sygnał zakończenia pracy
       SIGUSR1   30,10,16   Term    Sygnał 1 użytkownika
       SIGUSR2   31,12,17   Term    Sygnał 2 użytkownika
       SIGCHLD   20,17,18    Ign    Potomek zatrzymał się lub zakończył pracę
       SIGCONT   19,18,25   Cont    Kontynuuj, jeśli się zatrzymał

       SIGSTOP   17,19,23   Stop    Zatrzymaj proces
       SIGTSTP   18,20,24   Stop    Zatrzymanie napisane z terminala
       SIGTTIN   21,21,26   Stop    Wejście terminala dla procesu w tle
       SIGTTOU   22,22,27   Stop    Wyjście terminala dla procesu w tle

       Sygnałów SIGKILL oraz SIGSTOP nie można przechwycić, zablokować ani zignorować.

       Następnie sygnały niewystępujące w standardzie POSIX.1-1990, ale opisane w SUSv2 i POSIX.1-2001.

       Sygnał      Wartość    Akcja   Komentarz
       ───────────────────────────────────────────────────────────────────────
       SIGBUS      10,7,10    Core    Błąd szyny (niepr. dostęp do pamięci)
       SIGPOLL                Term    Zdarzenie odpytywalne (Sys V).
                                      Synonim dla SIGIO
       SIGPROF     27,27,29   Term    Przeterminowanie zegara profilowego
       SIGSYS      12,31,12   Core    Niewłaściwy argument funkcji (SVr4)
       SIGTRAP        5       Core    Śledzenie/pułapka kontrolna
       SIGURG      16,23,21    Ign    Pilny warunek na gnieździe (BSD 4.2)
       SIGVTALRM   26,26,28   Term    Wirtualny zegar alarmu (BSD 4.2)
       SIGXCPU     24,24,30   Core    Przekroczone ogran. czasu CPU (BSD 4.2)
       SIGXFSZ     25,25,31   Core    Przekr. ogran. rozmiaru pliku (BSD 4.2)

       Do  wersji  2.2  Linuksa  (włącznie)  domyślne  zachowanie dla sygnałów SIGSYS, SIGXCPU, SIGXFSZ oraz (na
       architekturach innych niż SPARC i MIPS) SIGBUS polegało na przerwaniu procesu (bez  zrzutu  pamięci).  (W
       niektórych  innych  Uniksach  domyślne  zachowanie dla SIGXCPU i SIGXFSZ polega na przerwaniu procesu bez
       zrzutu pamięci). Linux 2.4 jest zgodny ze wymaganiami standardu POSIX.1-2001 dotyczącymi tych sygnałów  i
       przerywa proces ze zrzutem pamięci.

       A teraz różne inne sygnały.

       Sygnał      Wartość    Akcja   Komentarz
       ───────────────────────────────────────────────────────────────────────
       SIGIOT         6       Core    pułapka IOT. Synonim SIGABRT
       SIGEMT       7,-,7     Term
       SIGSTKFLT    -,16,-    Term    Błąd stosu koprocesora (nieużywany)
       SIGIO       23,29,22   Term    I/O teraz możliwe (BSD 4.2)
       SIGCLD       -,-,18     Ign    Synonim SIGCHLD
       SIGPWR      29,30,19   Term    Błąd zasilania (System V)
       SIGINFO      29,-,-            Synonim SIGPWR
       SIGLOST      -,-,-     Term    Utracono blokadę pliku (nieużywane)
       SIGWINCH    28,28,20    Ign    Sygnał zmiany rozm. okna (BSD 4.3, Sun)
       SIGUNUSED    -,31,-    Core    Synonimiczny z SIGSYS

       (Sygnał 29 oznacza SIGINFO / SIGPWR na architekturze alpha, lecz SIGLOST na architekturze sparc).

       SIGEMT  nie  jest  wymieniony  w  POSIX.1-2001,  lecz  pomimo to pojawia się w większości innych Uniksów.
       Domyślną akcją dla tego sygnału jest zazwyczaj przerwanie procesu ze zrzutem pamięci.

       SIGPWR (niewymieniony w POSIX.1-2001) jest zazwyczaj domyślnie ignorowany  w  tych  Uniksach,  w  których
       występuje.

       SIGIO (niewymieniony w POSIX.1-2001) jest domyślnie ignorowany w niektórych innych Uniksach.

       Na większości architektur, jeśli SIGUNUSED jest zdefiniowany, to jest synonimem dla SIGSYS.

   Sygnały czasu rzeczywistego
       Od  wersji 2.2 Linux wspiera sygnały czasu rzeczywistego zdefiniowane pierwotnie w rozszerzeniu dla czasu
       rzeczywistego  POSIX.1b  (a  obecnie  zawarte  w  POSIX.1-2001).  Zakres  obsługiwanych  sygnałów   czasu
       rzeczywistego  jest  definiowany  przez  makra SIGRTMIN i  SIGRTMAX. POSIX.1-2001 wymaga od implementacji
       wspierania co najmniej _POSIX_RTSIG_MAX (8) sygnałów czasu rzeczywistego.

       Jądro Linuksa  wspiera  33  różne  sygnały  czasu  rzeczywistego,  o  numerach  od  32  do  64.  Jednakże
       implementacja  wątków  POSIX w glibc używa dwóch (dla NPTL) lub trzech (dla LinuxThreads) z nich na swoje
       wewnętrzne potrzeby (patrz pthreads(7)), odpowiednio zmieniając także SIGRTMIN (na 34 lub  35).  Ponieważ
       zakres  dostępnych  sygnałów  czasu  rzeczywistego  zmienia  się zależnie od implementacji wątków w glibc
       (różnice mogą występować również w czasie działania aplikacji, zależnie od wersji jądra i  glibc)  i  tak
       naprawdę  zakres  ten różni się pomiędzy implementacjami Uniksa, programy nigdy nie powinny się odwoływać
       do sygnałów czasu rzeczywistego za pomocą liczb wpisanych na stałe, ale powinny zawsze się  odwoływać  do
       sygnałów  czasu rzeczywistego używając notacji SIGRTMIN+n, i sprawdzać (podczas działania aplikacji), czy
       SIGRTMIN+n nie przekracza SIGRTMAX.

       W odróżnieniu od sygnałów standardowych, sygnały czasu rzeczywistego nie mają predefiniowanego znaczenia:
       można wykorzystywać cały zestaw sygnałów czasu rzeczywistego do celów określonych w aplikacji.

       Domyślą akcją na nieobsłużony sygnał czasu rzeczywistego jest przerwanie procesu, który go otrzymał.

       Sygnały czasu rzeczywistego są rozpoznawane w następujący sposób:

       1.  Można  kolejkować  wiele egzemplarzy sygnału czasu rzeczywistego. Dla odróżnienia, jeśli w czasie gdy
           standardowy sygnał jest blokowany zostanie doręczonych wiele egzemplarzy tego  sygnału,  tylko  jeden
           egzemplarzy trafia do kolejki.

       2.  Jeśli sygnał wysłano korzystając z sigqueue(3), można wysłać wraz z tym sygnałem wartość towarzyszącą
           (całkowitą lub wskaźnik). Jeśli proces otrzymujący ustanawia funkcję  obsługi  dla  tego  sygnału  za
           pomocą   znacznika   SA_SIGACTION   funkcji  sigaction(2),  to  otrzymuje  towarzyszącą  mu  daną  za
           pośrednictwem pola si_value struktury siginfo_t przekazanej  jako  drugi  argument  funkcji  obsługi.
           Ponadto,  pola si_pid oraz si_uid tej struktury mogą służyć do otrzymania identyfikatora procesu oraz
           rzeczywistego identyfikatora użytkownika procesu wysyłającego sygnał.

       3.  Sygnały czasu rzeczywistego są doręczane w zagwarantowanej kolejności.  Sygnały  czasu  rzeczywistego
           jednego  rodzaju są doręczane w takiej kolejności, w jakiej zostały wysłane. Jeśli do procesu zostaną
           wysłane różne sygnały czasu rzeczywistego, będą one  doręczone  począwszy  od  sygnału  o  najniższym
           numerze.  (Tzn.  sygnały  o niskich numerach mają najwyższy priorytet). Sygnały standardowe zachowują
           się inaczej: jeśli kilka standardowych sygnałów oczekuje na proces,  to  kolejność  dostarczenia  nie
           jest określona.

       POSIX  nie  określa,  które  z sygnałów powinny zostać doręczone jako pierwsze w sytuacji, gdy obsłużenia
       wymagają zarówno sygnały standardowe, jak i  sygnały  czasu  rzeczywistego.  Linux,  podobnie  do  innych
       implementacji, daje w tym przypadku pierwszeństwo sygnałom standardowym.

       Zgodnie   z   POSIX,   implementacja   powinna   zezwalać   na   kolejkowanie   do  procesu  co  najmniej
       _POSIX_SIGQUEUE_MAX (32) sygnałów czasu rzeczywistego. Jednakże w Linuksie  zostało  to  zaimplementowane
       inaczej.  Aż  do wersji jądra 2.6.7 (włącznie) Linux narzuca ogólnosystemowe ograniczenie liczby sygnałów
       czasu rzeczywistego kolejkowanych do wszystkich procesów. Ograniczenie to można zobaczyć, a  także  (przy
       odpowiednich  uprawnieniach)  zmienić  za  pośrednictwem  pliku  /proc/sys/kernel/rtsig-max. Podobnie, za
       pośrednictwem pliku /proc/sys/kernel/rtsig-nr można dowiedzieć się, ile sygnałów czasu rzeczywistego jest
       aktualnie   w   kolejce.  W  Linuksie  2.6.8  ten  interfejs  /proc  został  zastąpiony  limitem  zasobów
       RLIMIT_SIGPENDING, który określa limit kolejkowanych  sygnałów  dla  poszczególnych  użytkowników;  patrz
       setrlimit(2) w celu uzyskania dalszych informacji.

       Dodanie sygnałów czasu rzeczywistego wymogło poszerzenie struktury zestawu sygnałów (sigset_t) z 32 do 64
       bitów. W konsekwencji różne wywołania systemowe zostały zastąpione nowymi, które obsługują większy zestaw
       sygnałów. Oto stare i nowe wywołania systemowe:

       Linux 2.0 i wcześniejsze   Linux 2.2 i późniejsze
       sigaction(2)               rt_sigaction(2)
       sigpending(2)              rt_sigpending(2)
       sigprocmask(2)             rt_sigprocmask(2)
       sigreturn(2)               rt_sigreturn(2)
       sigsuspend(2)              rt_sigsuspend(2)
       sigtimedwait(2)            rt_sigtimedwait(2)

   Funkcje bezpieczne podczas asynchronicznego przetwarzania sygnałów
       Funkcja  obsługi  sygnału  musi  być  bardzo  ostrożna,  ponieważ  przetwarzanie w innym miejscu może być
       przerwane w przypadkowym punkcie wykonywaniu programu.  POSIX  zawiera  pojęcie  "funkcji  bezpiecznych".
       Jeśli  sygnał  przerwie  przetwarzanie  funkcji niebezpiecznej i procedura obsługi sygnału wywoła funkcję
       niebezpieczną, albo zakończy się poprzez wywołanie longjmp() lub siglongjmp(), a program następnie wywoła
       funkcję niebezpieczną, to zachowanie programu jest niezdefiniowane.

       POSIX.1-2004  (znany  także  jako  POSIX.1-2001  Technical  Corrigendum  2) wymaga implementacji sygnałów
       dających gwarancję, że następujące funkcje można bezpiecznie wywołać wewnątrz funkcji obsługi sygnału:

           _Exit()
           _exit()
           abort()
           accept()
           access()
           aio_error()
           aio_return()
           aio_suspend()
           alarm()
           bind()
           cfgetispeed()
           cfgetospeed()
           cfsetispeed()
           cfsetospeed()
           chdir()
           chmod()
           chown()
           clock_gettime()
           close()
           connect()
           creat()
           dup()
           dup2()
           execle()
           execve()
           fchmod()
           fchown()
           fcntl()
           fdatasync()
           fork()
           fpathconf()
           fstat()
           fsync()
           ftruncate()
           getegid()
           geteuid()
           getgid()
           getgroups()
           getpeername()
           getpgrp()
           getpid()
           getppid()
           getsockname()
           getsockopt()
           getuid()
           kill()
           link()
           listen()
           lseek()
           lstat()
           mkdir()
           mkfifo()
           open()
           pathconf()
           pause()
           pipe()
           poll()
           posix_trace_event()
           pselect()
           raise()
           read()
           readlink()
           recv()
           recvfrom()
           recvmsg()
           rename()
           rmdir()
           select()
           sem_post()
           send()
           sendmsg()
           sendto()
           setgid()
           setpgid()
           setsid()
           setsockopt()
           setuid()
           shutdown()
           sigaction()
           sigaddset()
           sigdelset()
           sigemptyset()
           sigfillset()
           sigismember()
           signal()
           sigpause()
           sigpending()
           sigprocmask()
           sigqueue()
           sigset()
           sigsuspend()
           sleep()
           sockatmark()
           socket()
           socketpair()
           stat()
           symlink()
           sysconf()
           tcdrain()
           tcflow()
           tcflush()
           tcgetattr()
           tcgetpgrp()
           tcsendbreak()
           tcsetattr()
           tcsetpgrp()
           time()
           timer_getoverrun()
           timer_gettime()
           timer_settime()
           times()
           umask()
           uname()
           unlink()
           utime()
           wait()
           waitpid()
           write()

       POSIX.1-2008 usuwa z powyższej listy funkcje fpathconf(), pathconf() i sysconf() oraz dodaje  następujące
       funkcje:

           execl()
           execv()
           faccessat()
           fchmodat()
           fchownat()
           fexecve()
           fstatat()
           futimens()
           linkat()
           mkdirat()
           mkfifoat()
           mknod()
           mknodat()
           openat()
           readlinkat()
           renameat()
           symlinkat()
           unlinkat()
           utimensat()
           utimes()

       POSIX.1-2008 Technical Corrigendum 1 (2013) dodaje następujące funkcje:

           fchdir()
           pthread_kill()
           pthread_self()
           pthread_sigmask()

   Przerywanie wywołań systemowych i funkcji bibliotecznych przez funkcje obsługi sygnałów
       Jeśli  procedura  obsługi  sygnału  jest  wywołana  w trakcie wywołania systemowego lub wywołania funkcji
       bibliotecznej to wtedy albo:

       * wywołanie jest automatycznie uruchamiane ponownie po zakończeniu funkcji obsługującej sygnał, albo

       * wywołanie zwraca błąd EINTR.

       To, które z powyższych wystąpi, zależy od interfejsu i od tego, czy podczas ustanawiania funkcji  obsługi
       sygnału  użyto  znacznika  SA_RESTART (patrz sigaction(2)). Szczegóły się różnią między różnymi Uniksami,
       poniżej podano szczegóły dotyczące Linuksa.

       Jeśli blokowane wywołanie jednego z poniższych interfejsów zostanie  przerwane  przez  procedurę  obsługi
       sygnału, to wywołanie to zostanie automatycznie uruchomione ponownie, jeśli użyto znacznika SA_RESTART. W
       przeciwnym wypadku wywołanie zwróci błąd EINTR:

           * Wywołania read(2), readv(2), write(2), writev(2) i ioctl(2) na urządzeniach "powolnych". Urządzenie
             "powolne" to takie, w którym operacja wejścia/wyjścia może się blokować przez nieskończony czas, na
             przykład: terminal, potok lub gniazdo. Jeśli  wywołanie  systemowe  wejścia/wyjścia  na  urządzeniu
             powolnym spowodowało już jakiś transfer danych, zanim zostało przerwane przez sygnał, to zwróci ono
             pomyślny kod zakończenie (będący zazwyczaj liczbą przetransferowanych bajtów). Proszę zauważyć,  że
             (lokalny)  dysk  zgodnie  z tą definicją nie jest urządzeniem powolnym: operacje wejścia/wyjścia na
             urządzeniach dyskowych nie są przerywane sygnałami.

           * open(2), jeśli może się zablokować (np. podczas otwierania FIFO, patrz fifo(7)).

           * wait(2), wait3(2), wait4(2), waitid(2) i waitpid(2).

           * Interfejsy gniazd: accept(2), connect(2), recv(2), recvfrom(2), recvmmsg(2),  recvmsg(2),  send(2),
             sendto(2) i sendmsg(2), chyba że ustawiono timeout na gnieździe (patrz niżej).

           * Interfejsy blokady plików: flock(2) i F_SETLKW oraz operacje F_OFD_SETLKW fcntl(2)

           * Interfejsy   kolejek   komunikatów   POSIX:   mq_receive(3),   mq_timedreceive(3),   mq_send(3)   i
             mq_timedsend(3).

           * futex(2) FUTEX_WAIT (od Linuksa 2.6.22; wcześniej zawsze zwracał błąd EINTR).

           * getrandom(2).

           * pthread_mutex_lock(3), pthread_cond_wait(3) i powiązane API.

           * futex(2)  FUTEX_WAIT_BITSET.

           * Interfejsy semaforów POSIX: sem_wait(3) i sem_timedwait(3) (od Linuksa 2.6.22;  wcześniejsze wersje
             zawsze zwracały błąd EINTR).

       Następujące interfejsy nigdy nie są wznawiane po przerwaniu przez funkcję obsługi sygnału, niezależnie od
       tego, czy SA_RESTART zostało użyte. Jeśli zostaną przerwane przez  funkcję  obsługi  sygnału,  to  zawsze
       kończą się niepowodzeniem, zwracając błąd EINTR:

           * "Wejściowe"   interfejsy   gniazd,   jeśli   ustawiono  timeout  gniazda  (SO_RCVTIMEO)  za  pomocą
             setsockopt(2): accept(2), recv(2),  recvfrom(2),  recvmmsg(2)   (również  z  niezerowym  argumentem
             timeout) i recvmsg(2).

           * "Wyjściowe"   interfejsy   gniazd,   jeśli   ustawiono  timeout  gniazda  (SO_RCVTIMEO)  za  pomocą
             setsockopt(2): connect(2), send(2), sendto(2) i sendmsg(2).

           * Interfejsy oczekiwania na sygnały: pause(2), sigsuspend(2), sigtimedwait(2) i sigwaitinfo(2).

           * Interfejsy zwielokrotniające deskryptory plików: epoll_wait(2), epoll_pwait(2), poll(2),  ppoll(2),
             select(2) i pselect(2).

           * Interfejsy   komunikacji   międzyprocesowej   Systemu   V:   msgrcv(2),  msgsnd(2),  semop(2)  oraz
             semtimedop(2).

           * Interfejsy pauzujące proces: clock_nanosleep(2), nanosleep(2) i usleep(3).

           * read(2) czytające z deskryptora pliku inotify(7).

           * io_getevents(2).

       Funkcja sleep(3) nigdy nie zostanie  zrestartowana  po  przerwaniu  przez  sygnał  i  zawsze  kończy  się
       pomyślnie, zwracając liczbę pozostałych sekund, podczas których proces powinien był pauzować.

   Przerywanie wywołań systemowych i funkcji bibliotecznych przez sygnały zatrzymujące proces
       Pod  Linuksem,  nawet  jeśli  procedury obsługi sygnału nie zostaną ustawione, pewne interfejsy blokujące
       mogą się zakończyć niepowodzeniem i zwrócić błąd EINTR po tym, jak proces zostanie zatrzymany  za  pomocą
       jednego  z sygnałów zatrzymujących (takich jak SIGSTOP), a następnie wznowiony za pomocą SIGCONT. POSIX.1
       nie wspiera tego zachowania, nie występuje ono także na innych systemach.

       Następujące interfejsy Linuksa zachowują się w ten sposób:

           * "Wejściowe"  interfejsy  gniazd,  jeśli  ustawiono  timeout   gniazda   (SO_RCVTIMEO)   za   pomocą
             setsockopt(2):  accept(2),  recv(2),  recvfrom(2),  recvmmsg(2)   (również  z niezerowym argumentem
             timeout) i recvmsg(2).

           * "Wyjściowe"  interfejsy  gniazd,  jeśli  ustawiono  timeout   gniazda   (SO_RCVTIMEO)   za   pomocą
             setsockopt(2):  connect(2),  send(2),  sendto(2)  i  sendmsg(2),  jeśli ustawiono timeout wysyłania
             danych(SO_SNDTIMEO).

           * epoll_wait(2), epoll_pwait(2).

           * semop(2), semtimedop(2).

           * sigtimedwait(2), sigwaitinfo(2).

           * read(2) czytające z deskryptora pliku inotify(7).

           * Linux 2.6.21 i wcześniejsze: futex(2)  FUTEX_WAIT, sem_timedwait(3), sem_wait(3).

           * Linux 2.6.8 i wcześniejsze: msgrcv(2), msgsnd(2).

           * Linux 2.4 i wcześniejsze: nanosleep(2).

ZGODNE Z

       POSIX.1, z wyjątkami jak podano.

ZOBACZ TAKŻE

       kill(1),  getrlimit(2),  kill(2),  killpg(2),   restart_syscall(2),   rt_sigqueueinfo(2),   setitimer(2),
       setrlimit(2),   sgetmask(2),   sigaction(2),   sigaltstack(2),   signal(2),  signalfd(2),  sigpending(2),
       sigprocmask(2),   sigsuspend(2),   sigwaitinfo(2),   abort(3),   bsd_signal(3),   longjmp(3),   raise(3),
       pthread_sigqueue(3),   sigqueue(3),   sigset(3),   sigsetops(3),   sigvec(3),  sigwait(3),  strsignal(3),
       sysv_signal(3), core(5), proc(5), nptl(7), pthreads(7), sigevent(7)

O STRONIE

       Angielska wersja tej strony pochodzi z wydania 4.05 projektu Linux man-pages. Opis  projektu,  informacje
       dotyczące   zgłaszania   błędów   oraz   najnowszą   wersję   oryginału   można   znaleźć   pod   adresem
       https://www.kernel.org/doc/man-pages/.

TŁUMACZENIE

       Autorami polskiego tłumaczenia niniejszej strony podręcznika  man  są:  Przemek  Borys  (PTM)  <pborys@p-
       soft.silesia.linux.org.pl>, Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>.

       Polskie  tłumaczenie  jest  częścią  projektu  manpages-pl;  uwagi,  pomoc,  zgłaszanie błędów na stronie
       http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją  4.05 oryginału.