WEBVTT Kind: captions; Language: fi 1 00:00:00.140 --> 00:00:04.130 Sitten seuraava aihepiiri- video jonka aiheena on: 2 00:00:04.130 --> 00:00:08.310 Signaalit. Mitä nämä signaalit ovat? 3 00:00:08.310 --> 00:00:15.120 Haetaan semmoinen ohjelma kuin... 4 00:00:15.120 --> 00:00:21.110 sigesim.c Tuo hae.sh on esitelty videossa 5 00:00:21.110 --> 00:00:25.070 'säikeiden tarve'. 6 00:00:25.070 --> 00:00:28.130 Ohjelma selittää meille mitä nämä signaalit ovat. 7 00:00:28.130 --> 00:00:33.190 Itse asiassa me ollaan törmätty jo signaaleihin muutamassa vaiheessa. 8 00:00:33.190 --> 00:00:37.520 Aiemmassa videossa me tehtiin se "kaikenlaiskija", sellainen ohjelma, 9 00:00:37.520 --> 00:00:42.170 että se jäi pyörimään ja kulutti kaiken ajan ja sitten käytiin se ohjelma 10 00:00:42.170 --> 00:00:46.560 tappamassa semmoisella komennolla kuin kill. 11 00:00:46.560 --> 00:00:48.470 OK. 12 00:00:48.470 --> 00:00:51.550 Mutta jos tälle kill-komennolle antaa ... 13 00:00:51.550 --> 00:00:54.590 argumentin -l, se listaa kaikki mahdolliset signaalit. 14 00:00:54.590 --> 00:00:59.380 Me käytettiin 'kill -9' ja prosessi-id, mutta jos kirjoitetaan 15 00:00:59.380 --> 00:01:04.060 kill, viiva ja 9... 16 00:01:04.060 --> 00:01:09.430 [mongerrusta ja pohdintaa] kill -9 ... 17 00:01:09.430 --> 00:01:15.110 Tällä me voidaan lähettää ohjelmille tai prosesseille 18 00:01:15.110 --> 00:01:18.490 erilaisia signaaleja. 19 00:01:18.490 --> 00:01:24.530 Tämän idea on, että halutaan kertoa ulkopuolelta jollekin prosessille, että hei, 20 00:01:24.530 --> 00:01:30.460 nyt huomioit tämä asia. Tuossa listassa on signaaleja, kuten 21 00:01:30.460 --> 00:01:38.870 SIGHUP elikkä hang-up signal, SIGINT eli interrupt signal, SIGQUIT eli lopeta. 22 00:01:38.870 --> 00:01:41.110 SIGILL en edes tiedä mitä se tarkoittaa ... alapuolella 23 00:01:41.110 --> 00:01:42.910 SIGKILL eli prosessin 24 00:01:42.910 --> 00:01:46.630 tappaminen, SIGUSR1 ja SIGUSR2 ja niin poispäin. 25 00:01:46.630 --> 00:01:51.370 Nämä ovat signaaleja mitä prosessit voi lähettää toisille. Näillä yksi 26 00:01:51.370 --> 00:01:55.980 prosessi voi pyytää toista prosessia tekemään jotain yksinkertaista. 27 00:01:55.980 --> 00:01:59.660 Mitä tää yksinkertaista on mihin näitä voisi käyttää? Otetaan 28 00:01:59.660 --> 00:02:06.460 tuolta esille toi äsken haettu signaali esimerkki -ohjelma. 29 00:02:06.460 --> 00:02:11.860 Saadaan tämmöinen söpö pieni ohjelma esille. 30 00:02:11.860 --> 00:02:16.270 OK. Eli mitä tää ohjelma tekee? 31 00:02:16.270 --> 00:02:20.500 Kunhan mä nyt pääsen sinne asti. 32 00:02:20.500 --> 00:02:25.310 Tuossa alkaa main-aliohjelma. 33 00:02:25.310 --> 00:02:30.100 Tää luettelee jotain signaaleja ja sen jälkeen, 34 00:02:30.100 --> 00:02:34.170 kas kummaa, se menee ikuiseen silmukkaan, 35 00:02:34.170 --> 00:02:43.600 jossa se menee unille kutsumalla aliohjelmaa pause... [kuorsausta] 36 00:02:43.600 --> 00:02:47.470 Mut sitten se jostain syystä herää unilta. Miksi? 37 00:02:47.470 --> 00:02:53.110 Se ohjelma herää unilta kun se saa signaalin 38 00:02:53.110 --> 00:02:56.990 Katsotaa pause-komennon opasta [näppäilee M-x man] 39 00:02:56.990 --> 00:03:02.100 [Eli M on meta, alt, opt tai esc] Joo. 40 00:03:02.100 --> 00:03:06.860 Pause komento odottaa signaalia ja kun se saa sen signaalin 41 00:03:06.860 --> 00:03:10.950 niin sen jälkeen suoritus jatkuu pausen jälkeiseltä riviltä. 42 00:03:10.950 --> 00:03:14.670 Mutta nyt on semmoinen hauska juttu, että me ollaan täällä 43 00:03:14.670 --> 00:03:19.810 yläpuolella kutsuttu signal- aliohjelmaa ... mitä se tekee? 44 00:03:19.810 --> 00:03:24.220 Se rekisteröi signaalinkäsittelijän. 45 00:03:24.220 --> 00:03:32.200 Eli jonkun aliohjelman, mitä kutsutaan kun tämä prosessi saa tietyn signaalin 46 00:03:32.200 --> 00:03:37.250 Eli tuolla on nyt määritelty: Kun tulee SIGINT, ... 47 00:03:37.250 --> 00:03:42.150 kutsu sellaista aliohjelmaa kun handle_sigint. 48 00:03:42.150 --> 00:03:44.540 Kun tulee SIGTSTP 49 00:03:44.540 --> 00:03:47.990 Kutsu semmoista vaaliohjelmaa kuin handle_sigtstp. 50 00:03:47.990 --> 00:03:52.890 Ja kun tulee SIGABRT, kutsu aliohjelmaa handle_sigabrt. 51 00:03:52.890 --> 00:04:00.570 Ja, yllätys yllätys, kyseiset aliohjelmat löytyy nyt täältä alapuolelta. 52 00:04:00.570 --> 00:04:03.220 Noin. 53 00:04:03.220 --> 00:04:07.200 Eli handle_sigint-aliohjelmassa tulostetaan, että 54 00:04:07.200 --> 00:04:12.340 Control-c, elikkä SIGINT poimittu, mutta ei tehdä mitään. 55 00:04:12.340 --> 00:04:14.580 Ja samalla 56 00:04:14.580 --> 00:04:17.580 rekisteröidään tää signaali uudestaan kuunneltavaksi 57 00:04:17.580 --> 00:04:22.970 vielä seuraavankin kerran. Sitten on handle_sigtstp, 58 00:04:22.970 --> 00:04:27.510 joka jälleen taas rekisteröi stop signaalin kuuntelun uudestaan, 59 00:04:27.510 --> 00:04:31.950 tulostaa, että control-z signaali on poimittu, mutta ei tehdä mitään. 60 00:04:31.950 --> 00:04:34.370 Ja sitten on vielä sekin SIGABRT 61 00:04:34.370 --> 00:04:38.890 Control-\ (kenoviiva) aiheuttamalla signaalilla lopetetaan. 62 00:04:38.890 --> 00:04:45.560 Silloin ei enää jatketa mitään. Meidän pitää kääntää tämä ensimmäisenä. 63 00:04:45.560 --> 00:04:55.820 [näppäilee M-x compile] Otetaan nyt se sieltä pois 64 00:04:55.820 --> 00:05:02.760 pthread-kirjasto... [näpyti-näpytystä ja sähläystä] 65 00:05:02.760 --> 00:05:06.340 Kääntyi kauniisti. Mennään ajamaan se. 66 00:05:06.340 --> 00:05:09.390 Ajetaan sigesim... noin. 67 00:05:09.390 --> 00:05:13.620 Nyt se tulostui tuonne kuvaruudun alaosaan. 68 00:05:13.620 --> 00:05:16.830 Ja nyt tää ohjelma meni unille eikä tee yhtään mitään 69 00:05:16.830 --> 00:05:19.790 vaikka mä tänne kirjoittelen mitään... [hups...] 70 00:05:19.790 --> 00:05:23.710 Demo efekti mitä tapahtui? 71 00:05:23.710 --> 00:05:28.570 Täytyy katsoa hidastettuna videolta tämä uudestaan, mutta ilmeisesti mä 72 00:05:28.570 --> 00:05:34.370 onnistuin tappamaan tuon terminaaliyhteyden semmoisella näppäilyllä [signaalilla] 73 00:05:34.370 --> 00:05:38.330 mikä ei kerennyt menemään meidän signaalin käsittelijälle asti. 74 00:05:38.330 --> 00:05:46.570 Vaan multa sulkeutui toi ssh-prosessi, joten nyt joudun ottamaan halavaan uuden yhteyden. 75 00:05:46.570 --> 00:05:53.000 Kirjoitetaan salasana k-i-s-s-a-i-s-t-u-u. Olemme taas täällä. 76 00:05:53.000 --> 00:05:56.130 Katsokaa, kuin ihanaa, kun meillä onscreen käytössä! 77 00:05:56.130 --> 00:05:57.930 Nyt me ollaan takaisin siellä... 78 00:05:57.930 --> 00:06:01.140 Saa kirjoitella mitä tahansa melkein ja ... 79 00:06:01.140 --> 00:06:03.640 [Riemastumisen ääniä!] Joo, katsokaa tuosta se johtuu. 80 00:06:03.640 --> 00:06:08.280 Painelin satunnaisesti control ... ei kun tota returnia, mutta mulla on itse 81 00:06:08.280 --> 00:06:13.360 asiassa tässä semmoinen juttu, että kun mä painan return pohjaan ja jotain 82 00:06:13.360 --> 00:06:18.500 kirjainta, niin se lähettää Control ja sen kirjaimen. 83 00:06:18.500 --> 00:06:23.080 Koska oikealla pikkurillillä ei ole control- näppäintä tässä typerässä näppäimistössä niin 84 00:06:23.080 --> 00:06:27.720 se on mulla tuossa returnissa piilossa, niin sen takia mä sain sinne laitettua semmoisen 85 00:06:27.720 --> 00:06:32.060 signaalin joka tappoikin tuosta tuon terminaaliyhteyden välistä. 86 00:06:32.060 --> 00:06:35.180 Mutta jos mä sanon sille että control-C niinku tossa nyt tapahtui 87 00:06:35.180 --> 00:06:38.300 niin se ilmoittaa signaalin poimituksi, mutta ei tehdä mitään. 88 00:06:38.300 --> 00:06:44.650 Mennään takaisin unille... mitä muita siellä oli control-Z. 89 00:06:44.650 --> 00:06:48.820 Control-C on se yleinen komento, jolla ohjelma 90 00:06:48.820 --> 00:06:55.170 pysähtyy, mutta eipä se tee nyt sitä koska nyt me napataan 91 00:06:55.170 --> 00:06:58.660 se signaali ja sanotaan että "hahaa ei toimi". 92 00:06:58.660 --> 00:07:01.740 Control-z oli siis se signaali joka sai sen prosessin menemään 93 00:07:01.740 --> 00:07:04.500 nukkumaan tai siis taustalle zombiksi. 94 00:07:04.500 --> 00:07:07.390 Ei zombiksi, vaan pysähtymään, taustalle. 95 00:07:07.390 --> 00:07:09.500 Mut sekään ei tee yhtään mitään. 96 00:07:09.500 --> 00:07:14.420 Koska sekin napataan... Sitten pitäisi saada jotenkin control-\ kenoviiva 97 00:07:14.420 --> 00:07:19.760 aikaiseksi, mutta jos yritän painaa täältä kontrollia, optionia ja 7, 98 00:07:19.760 --> 00:07:24.410 jolla saan tässä Macissä sen kenoviivan, niin ei toimi. 99 00:07:24.410 --> 00:07:27.010 Shiftin kanssa ei myöskään tule yhtään mitään. 100 00:07:27.010 --> 00:07:29.290 Mä en saa sitä lähetettyä. 101 00:07:29.290 --> 00:07:31.960 Millä tavalla mä saisin tuon prosessille lähetettyä nyt? 102 00:07:31.960 --> 00:07:34.940 Sen SIGABRT-signaalin? 103 00:07:34.940 --> 00:07:40.770 No... onneksi meillä on screen käytössä. 104 00:07:40.770 --> 00:07:45.960 Katsotaan mitkä mun prosessit on, elikkä mä aukaisin uuden ikkunan. 105 00:07:45.960 --> 00:07:47.820 Katson mun prosessit täältä. 106 00:07:47.820 --> 00:07:51.100 Pitäisi löytyä jostain tuolta löytyy sigesim.... 107 00:07:51.100 --> 00:07:55.530 Tossa. Sen id on 9 4 9 2 5. 108 00:07:55.530 --> 00:08:04.510 Kill -l... Elikkä mun pitäisi nyt lähettää SIGABRT. 109 00:08:04.510 --> 00:08:13.020 94925... ja pom. Mitään ei tapahtunut. 110 00:08:13.020 --> 00:08:19.670 Mutta kun me mennään sinne ikkunaan missä toi oli niin... 111 00:08:19.670 --> 00:08:25.220 Control-kenoviiva signaali on poimittu, lopetetaan. 112 00:08:25.220 --> 00:08:32.480 Eli kill on komento, jolla me voidaan lähetellä signaaleita eri prosesseille. 113 00:08:32.480 --> 00:08:35.610 Nyt me tuolle meidän signaaliesimerkkiohjelmalle laitettiin 114 00:08:35.610 --> 00:08:39.910 toi SIGABRT ... sillä me saatiin se pysähtymään. 115 00:08:39.910 --> 00:08:43.670 Tää on muuten se virallinen ja oikea tapa lähettää signaaleja. 116 00:08:43.670 --> 00:08:48.870 Se että kirjoitetaan 'kill -9' ja prosessi-id on huono tapa. 117 00:08:48.870 --> 00:08:53.370 Tää on oikea tapa mitä pitäisi käyttää, mutta ymmärrätte minkä takia ihmiset ei 118 00:08:53.370 --> 00:08:57.230 jaksa käyttää tätä ja ymmärrätte minkä takia se nopeampi tapa on tehty. 119 00:08:57.230 --> 00:09:03.310 Mutta signaaleista osa on semmoisia että POSIXissa taidetaan sanoa että tämä 120 00:09:03.310 --> 00:09:07.830 signaali tällä numerolla pitää löytyä, mutta kaikki noista ei löydy noilla numeroilla 121 00:09:07.830 --> 00:09:13.310 Ne voi vaihdella käyttöjärjestelmä toteutuksissa paikasta toiseen, joten se varmin tapa 122 00:09:13.310 --> 00:09:18.170 on, että kirjoitetaan sen signaalin nimi joka lähetetään. 123 00:09:18.170 --> 00:09:25.230 OK. Sitten on ihan pakko pikkaisen elvistellä. 124 00:09:25.230 --> 00:09:30.770 Koska aikaisempina vuosina paavo on aina ollut tuskissaan siitä, ettei se osa lähettää 125 00:09:30.770 --> 00:09:35.790 control-\, kenoviivaa... 126 00:09:35.790 --> 00:09:39.420 Miten lähetän control- kenoviivan mun näppäimistöltä? 127 00:09:39.420 --> 00:09:44.490 Kaksi kenoviivaa peräkkäin? Kokeillaan! Ei toimi. 128 00:09:44.490 --> 00:09:46.770 Muita ehdotuksia? 129 00:09:46.770 --> 00:09:54.010 Mä rupesin tätä tänään kokeilemaan ja sitten mulle tuli mieleen control-Ö 130 00:09:54.010 --> 00:09:57.410 Muistakaa ensimmäinen asia mitä te sanotte tässä tilanteessa, 131 00:09:57.410 --> 00:10:00.440 kun te ette saa jotain tehtyä: Ööö... 132 00:10:00.440 --> 00:10:06.020 Kokeillaan control-Ö ja se toimii. Miksi se toimi? 133 00:10:06.020 --> 00:10:10.320 Täällä ehdotettiin, että kenoviiva olisi tuossa öön kohdalla englanninkielisessä 134 00:10:10.320 --> 00:10:12.790 näppiksessä, mutta se ei ole se ratkaisu. 135 00:10:12.790 --> 00:10:16.220 Nyt on ihan pakko, kun sanoitte tuon, niin käydä kokeilemassa... 136 00:10:16.220 --> 00:10:21.260 englanninkielistä näppäimistöä--- 137 00:10:21.260 --> 00:10:23.270 Ei kun se varmaan toimii. 138 00:10:23.270 --> 00:10:26.720 Ei se toimi, koska siinä on puolipiste 139 00:10:26.720 --> 00:10:30.320 Enkä muista, missä kohti kenoviiva on englantilaisessa 140 00:10:30.320 --> 00:10:34.200 näppäimistössä.... 141 00:10:34.200 --> 00:10:40.340 Vaan.... paljastamme asian nimittäin... 142 00:10:40.340 --> 00:10:44.070 Menemme wikipediaan. 143 00:10:44.070 --> 00:10:51.010 Ja pyydämme sieltä semmoista asiaa, kun ääkköset... 144 00:10:51.010 --> 00:10:54.730 Emme ota kantaa euroviisuihin. 145 00:10:54.730 --> 00:11:03.560 Käärijä olisi voinut voittaa... [Hetki vanhan ukon äänellä:] 146 00:11:03.560 --> 00:11:10.910 Silloin kun minä olin nuori, oli 7-bittistä ASCIIta joka paikassa 147 00:11:10.910 --> 00:11:15.200 ja kun siinä 7-bit ASCIIssa ei ollut äätä eikä öötä, otettiin 148 00:11:15.200 --> 00:11:20.680 joukko hassuja merkkejä joita kukaan ei tarvitse [pyrsk] 149 00:11:20.680 --> 00:11:28.070 ääkkösten käyttöön, joten aalto- sulusta tuli ä, toisinpäi sulku, 150 00:11:28.070 --> 00:11:35.470 siitä tuli å, pystyviivalla ö, kenoviivalla iso-Ö. 151 00:11:35.470 --> 00:11:39.680 Haka sulku auki iso-Ä, haka- sulku kiinni iso-Å. 152 00:11:39.680 --> 00:11:43.610 Näette näitä aakkosia vieläkin. Hakasulut, ... 153 00:11:43.610 --> 00:11:47.160 aaltosulut, kenoviiva ja pystyviiva. 154 00:11:47.160 --> 00:11:52.400 Näppäimistökonfiguraatiota, -ladontaa, vaihtamalla joskus joutuu tilanteeseen, 155 00:11:52.400 --> 00:11:58.720 että 7-bittinen ASCII tulee päälle. 156 00:11:58.720 --> 00:12:00.850 Eniveiii... 157 00:12:00.850 --> 00:12:07.030 Esimerkkiohjelma on taas läpikäyty ja olemme oppineet että signal on keino 158 00:12:07.030 --> 00:12:11.420 yksinkertaisten viestien välittämiseen prosessilta toiselle. 159 00:12:11.420 --> 00:12:15.830 Sitten jos monimutkaisempia viestejä pitää saada välitettyä, niin 160 00:12:15.830 --> 00:12:21.000 siinä vaiheessa käytetään muita viestimieskeinoja, 161 00:12:21.000 --> 00:12:24.010 mutta niistä puhutaan myöhemmissä videoissa lisää.