{"id":494,"date":"2017-04-01T15:24:57","date_gmt":"2017-04-01T13:24:57","guid":{"rendered":"http:\/\/miroslaw.borodziuk.eu\/?p=494"},"modified":"2017-06-03T17:28:12","modified_gmt":"2017-06-03T15:28:12","slug":"zarzadzanie-procesami-przez-sygnaly","status":"publish","type":"post","link":"http:\/\/miro.borodziuk.eu\/index.php\/2017\/04\/01\/zarzadzanie-procesami-przez-sygnaly\/","title":{"rendered":"Zarz\u0105dzanie procesami przez sygna\u0142y"},"content":{"rendered":"<p>W systemie mo\u017ce by\u0107 uruchomionych setki tysi\u0119cy proces\u00f3w w jednym czasie. Czasem zachodzi potrzeba powiadomienia procesu o jakim\u015b zdarzeniu. Robi si\u0119 to przez wys\u0142anie sygna\u0142u kontrolnego do procesu. Procesy mog\u0105 tak\u017ce wykorzystywa\u0107 sygna\u0142y aby ostrzega\u0107 siebie nawzajem o jaki\u015b zdarzeniach. Proces po otrzymaniu sygna\u0142u zatrzymuje swoje wykonywanie i wykonuje instrukcj\u0119 okre\u015blon\u0105 przez sygna\u0142. <!--more-->Tak\u0105 instrukcj\u0105 mo\u017ce by\u0107 zamkni\u0119cie procesu, zabicie go lub zmuszenie go do ponownego przeczytania pliku konfiguracyjnego.<\/p>\n<p>Lista wszystkich sygna\u0142\u00f3w systemowych:<\/p>\n<pre># kill -l\r\n\r\n \u00a01) SIGHUP\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2) SIGINT\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 3) SIGQUIT\u00a0\u00a0\u00a0\u00a0\u00a0 4) SIGILL\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 5) SIGTRAP\r\n \u00a06) SIGABRT\u00a0\u00a0\u00a0\u00a0\u00a0 7) SIGBUS\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 8) SIGFPE\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 9) SIGKILL\u00a0\u00a0\u00a0\u00a0 10) SIGUSR1\r\n 11) SIGSEGV\u00a0\u00a0\u00a0\u00a0 12) SIGUSR2\u00a0\u00a0\u00a0\u00a0 13) SIGPIPE\u00a0\u00a0\u00a0\u00a0 14) SIGALRM\u00a0\u00a0\u00a0\u00a0 15) SIGTERM\r\n 16) SIGSTKFLT\u00a0\u00a0 17) SIGCHLD\u00a0\u00a0\u00a0\u00a0 18) SIGCONT\u00a0\u00a0\u00a0\u00a0 19) SIGSTOP\u00a0\u00a0\u00a0\u00a0 20) SIGTSTP\r\n 21) SIGTTIN\u00a0\u00a0\u00a0\u00a0 22) SIGTTOU\u00a0\u00a0\u00a0\u00a0 23) SIGURG\u00a0\u00a0\u00a0\u00a0\u00a0 24) SIGXCPU\u00a0\u00a0\u00a0\u00a0 25) SIGXFSZ\r\n 26) SIGVTALRM\u00a0\u00a0 27) SIGPROF\u00a0\u00a0\u00a0\u00a0 28) SIGWINCH\u00a0\u00a0\u00a0 29) SIGIO\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 30) SIGPWR\r\n 31) SIGSYS\u00a0\u00a0\u00a0\u00a0\u00a0 34) SIGRTMIN\u00a0\u00a0\u00a0 35) SIGRTMIN+1\u00a0 36) SIGRTMIN+2\u00a0 37) SIGRTMIN+3\r\n 38) SIGRTMIN+4\u00a0 39) SIGRTMIN+5\u00a0 40) SIGRTMIN+6\u00a0 41) SIGRTMIN+7\u00a0 42) SIGRTMIN+8\r\n 43) SIGRTMIN+9\u00a0 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13\r\n 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12\r\n 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9\u00a0 56) SIGRTMAX-8\u00a0 57) SIGRTMAX-7\r\n 58) SIGRTMAX-6\u00a0 59) SIGRTMAX-5\u00a0 60) SIGRTMAX-4\u00a0 61) SIGRTMAX-3\u00a0 62) SIGRTMAX-2\r\n 63) SIGRTMAX-1\u00a0 64) SIGRTMAX<\/pre>\n<p>Opis najcz\u0119\u015bciej u\u017cywanych sygna\u0142\u00f3w:<\/p>\n<table style=\"width: 729px;\">\n<tbody>\n<tr style=\"height: 26px;\">\n<td style=\"width: 65.1333px; height: 26px;\"><em><span style=\"color: #808080;\">Numer<\/span><\/em><\/td>\n<td style=\"width: 84.8667px; height: 26px;\"><em><span style=\"color: #808080;\">Nazwa<\/span><\/em><\/td>\n<td style=\"width: 1089px; height: 26px;\"><em><span style=\"color: #808080;\">Akcja<\/span><\/em><\/td>\n<\/tr>\n<tr style=\"height: 32.4667px;\">\n<td style=\"width: 65.1333px; height: 32.4667px; text-align: center;\"><strong><em>1<\/em><\/strong><\/td>\n<td style=\"width: 84.8667px; height: 32.4667px; text-align: left;\"><span style=\"color: #008000;\">SIGHUP<\/span><\/td>\n<td style=\"width: 1089px; height: 32.4667px;\">Sygna\u0142 zawieszaj\u0105cy (hung up). Zmusza proces do samoistnego roz\u0142\u0105czenia si\u0119 z wy\u0142\u0105czonego terminala, z kt\u00f3rym by\u0142 powi\u0105zany. Tak\u017ce instruuje demona aby ponownie przeczyta\u0142 plik konfiguracyjny.<\/td>\n<\/tr>\n<tr style=\"height: 26px;\">\n<td style=\"width: 65.1333px; height: 26px; text-align: center;\"><strong><em>2<\/em><\/strong><\/td>\n<td style=\"width: 84.8667px; height: 26px; text-align: left;\"><span style=\"color: #008000;\">SIGINT<\/span><\/td>\n<td style=\"width: 1089px; height: 26px;\">\u00a0Sygna\u0142 ^c (ctrl+c) wywo\u0142ywany przez kontroluj\u0105cy terminal do zaprzestania wykonywania procesu.<\/td>\n<\/tr>\n<tr style=\"height: 26px;\">\n<td style=\"width: 65.1333px; height: 26px; text-align: center;\"><strong><em>\u00a09<\/em><\/strong><\/td>\n<td style=\"width: 84.8667px; height: 26px; text-align: left;\"><span style=\"color: #008000;\">SIGKILL<\/span><\/td>\n<td style=\"width: 1089px; height: 26px;\">\u00a0Zabija proces nagle.<\/td>\n<\/tr>\n<tr style=\"height: 26px;\">\n<td style=\"width: 65.1333px; height: 26px; text-align: center;\"><strong><em>15<\/em><\/strong><\/td>\n<td style=\"width: 84.8667px; height: 26px; text-align: left;\"><span style=\"color: #008000;\">SIGTERM<\/span><\/td>\n<td style=\"width: 1089px; height: 26px;\">\u00a0Wysy\u0142a mi\u0119kki sygna\u0142 terminacji do zatrzymania procesu. Sygna\u0142 mo\u017ce by\u0107 zignorowany przez proces. Sygna\u0142 domy\u015blny.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Komendy s\u0142u\u017c\u0105ce do przekazywania sygna\u0142\u00f3w procesowi to <em>kill<\/em> i <em>pkill<\/em>, najcz\u0119\u015bciej u\u017cywane do przerwania wykonywania proces\u00f3w. U\u017cycie tych komend bez okre\u015blania nazwy sygna\u0142u lub numeru sygna\u0142u wysy\u0142a sygna\u0142 domy\u015blny tj. sygna\u0142 numer 15.\u00a0 Zwykli u\u017cytkownicy mog\u0105 zabija\u0107 procesy, kt\u00f3re s\u0105 ich w\u0142asno\u015bci\u0105, root mo\u017ce zabija\u0107 wszystkie procesy uruchomione w systemie.<\/p>\n<pre><code># kill PID_procesu<\/code> <code># pkill nazwa_procesu<\/code><\/pre>\n<p>Przyk\u0142ady:<br \/>\n<code> <\/code><\/p>\n<pre><code># pkill crond<\/code> <code># kill `pidof crond`<\/code><\/pre>\n<p><code><\/code>Polecenie <em>pidof<\/em> odnajduje <em>PID<\/em> procesu.<\/p>\n<p>Niekt\u00f3re procesy ignoruj\u0105 sygna\u0142 15 wtedy trzeba ja zmusi\u0107 do przerwania wykonywania sygna\u0142em 9:<br \/>\n<code> <\/code><\/p>\n<pre><code># pkill \u20139 crond<\/code> <code># kill \u20139 `pgrep crond`<\/code><\/pre>\n<p>Wszystkie procesy, kt\u00f3re spe\u0142niaj\u0105 okre\u015blony warunek mo\u017cna zmusi\u0107 do przerwania wykonywania komend\u0105:<\/p>\n<pre><code># killall nazwa_procesu<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>W systemie mo\u017ce by\u0107 uruchomionych setki tysi\u0119cy proces\u00f3w w jednym czasie. Czasem zachodzi potrzeba powiadomienia procesu o jakim\u015b zdarzeniu. Robi si\u0119 to przez wys\u0142anie sygna\u0142u kontrolnego do procesu. Procesy mog\u0105 tak\u017ce wykorzystywa\u0107 sygna\u0142y aby ostrzega\u0107 siebie nawzajem o jaki\u015b zdarzeniach. Proces po otrzymaniu sygna\u0142u zatrzymuje swoje wykonywanie i wykonuje instrukcj\u0119 okre\u015blon\u0105 przez sygna\u0142.<\/p>\n","protected":false},"author":1,"featured_media":1092,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[33],"tags":[],"_links":{"self":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts\/494"}],"collection":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/comments?post=494"}],"version-history":[{"count":16,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts\/494\/revisions"}],"predecessor-version":[{"id":1311,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts\/494\/revisions\/1311"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/media\/1092"}],"wp:attachment":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/media?parent=494"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/categories?post=494"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/tags?post=494"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}