Mitä exec tekee

Sudottelija

Mihin sitä tarvitaan, miten, milloin ja missä sitä voi käyttää ?

9

285

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • tuttu_juttu

      "man exec" voi auttaa kummasti. Käytännössä voit käynnistää omasta ohjelmassasi käsin toisen ohjelman. Eli kun vaikka klikkaat käynnistysikonia ruudullasi, tuo komento saa aikaan sen, että ohjelma tulee ajoon eli luodaan oma prosessi sitä varten.

      • Debianisti

        Eikös se mene niinpäin että execillä heitetään vanha ohjelma tunkiolle ja aletaan ajaa uutta ohjelmaa samassa prosessissa. Normaalistihan forkataan uusi prosessi.


    • aaaaass

      Miksi et kokeile?
      sillähän se selviää parhaiten? sen kun avaat komentotulkin ja komentotulkilla avaat seuraavan komentotulkin kirjoittaen aina ensin ton exec...
      ja ero silminhavaittava verrattuna jos ei käytä alussa tota exec "lisää"?
      (ja mihin kaikkeen sitä voikaan hyödyntää lienee seuraava kysymys?

    • lisäselvitys

      Exec on "sääntö" käynnistää ohjelma Säännöt on hyvii autokouluu käyvälle hyvä opettaa et liikenteenjakaja pitää ohittaa oikeelta nuolen osoittamalta puolelta?
      Sitten kun kokemusta kertyy niin voi itse päättää käyttääkö (exec:ii) tai kummalta puolelta liikenteenjakajan ohittaa (sen voi oikeesti ohittaa kummalta puolelta tahansa jos määrätytyt säännöt täyttyy Ilman mitään seuraamuksia.)

    • Turbo-Urpo1

      𝗲𝘅𝗲𝗰 komennon suoritusta ohjailevana valitsimena.

      Puhutaan vaikka find -komennosta johan tälläinen valitsin kuuluu.

      find ~ -type f -exec grep 'opera %U' {} \;

      Tuossa find komento määrätään hakemaan käyttäjän kotihakemistosta ja sen alihakemistoista tavallisija tiedostoja, ilman muita rajoituksia. Tavallisiin tiedostoihin ei kuulu hakemistot, sympooliset linkin, laitteiden konfikurointi tiedostot ja niin edelleen.

      Valitsin -exec — määrää find komennon välittämään nämä tiedostonimet polkuineen grep -komennolle, eli kaikki tavalliset tiedostot polkuineen välitetään eteenpäin.

      grep -komento tulostaa kaikkien niiden tiedostojen nimet polkuineen joiden sisällöstä se löytää 'opera %U' -merkkijonon. Kaarisulkeet {} kuvastaa paikkaa mihin find -komennon hakutulos sijoitetaan, ja \ -merkki määrää toteuttamaan tämän jälkeen tulevan opasteen kirjaimellisesti, eli komentoputkissahan tuo ( ; ) puolipiste tarkoittaa ENTER -näppäimen painallusta.

    • Turbo-Urpo1

      𝗲𝘅𝗲𝗰 -komento itsenäisenä komentona.

      Tässä esimerkissä up on järjestelmän päivittävä Bash script, joka käynnistetään xfce4-terminal emulaattorissa bach -komentotulkin suoritettavaksi.

      Kun sinä nyt aloitat tuon komennon suorittamisen painamalla Ctrl Alt T saat sillä aikaan sen xfce4-terminal emulaattori käynnistyy, josta käsin voit suorittaa bash -tulkin ymmärtämiä komentoja.

      exec xfce4-terminal -e /bin/bash -e up

      Tuossa tuo komento avaa uuden xfce4-terminal emulaattorin jonka sisällä suoritetaan tuojärjestelmän päivittävä up -script . exec -komento saa aikaan että tuo terminaali josta uusi käynistettiin sulkeutuu välittömästi kun komento on käynnistetty, se ei vaikuta tuohon toiseen terminaaliin jossa tuo päivitys suoritetaan. Eli lyhyesti exec sulkee sen prosessin jossa se suoritetaan.

      • hyvää_juttua

        Kannattaa vilkaista vähän manuaalisivulta system() -komentoa myös. Ja fork()/waitpid(). Eli system() on wrapperi tavallaan useammalle funktiolle. Jos noita joutuu käyttämään paljon, kannattaa miettiä, josko voisi opetella samalla jotain IPC-protokollaa(inter-process communication) - on nimittäin jossakin määrin hidasta luoda prosessi - teoria sanoo, että aika on nolla, mutta koodin määrän kasvu aiheuttaa jatkuvan purun/latailun prosessin init/destroy-funktioissa vuoksi sen, että todelliset nopeushyödyt saa pystyttämällä pysyväisprosessin, jolloin softat parhaassa tapauksessa on ajossa eri core:lla ja hoidetaan taustalla.
        Toisaalta shell-tasolta noita pyörittäessä voi pyöritettävät asiat olla niin isoja, ettei tuolle yllä mainitulle ole mitään tarvetta, vaikka exec-overheadia olisikin. Optimointi hukkuisi muuhun hitauteen kuitenkin. Ja c-tasolta asian hoitaminen taas voi mennä niin monimutkaiseksi, ettei sitä saisi ikinä toimintakuntoon - ainakaan ajoissa!


    • WindowsHelpompi

      "Ja c-tasolta asian hoitaminen taas voi mennä niin monimutkaiseksi, ettei sitä saisi ikinä toimintakuntoon - ainakaan ajoissa!"

      Mutta: samaa matalan tason koodia voi kirjoittaa myös FreePascalilla kuin C:lläkin, mutta on helpompaa ja vähemmän virhealtista kuin C.

      Tosin: jos nopeutta yrittää maksimoida välttelemällä uuden prosessin luomista, se voi osoittautua mahdottomaksi.

      Miksikö?

      No: omatekoinen apuohjelmasi voi helposti ajaa toisen ohjelman samassa prosessissa linuxissa.

      Mutta, kun se toinen ohjelma päättyy, mikään EI palauta omaa ohjelmaasi ajoon samaan prosessiin, vaan silloin koko prosessi päättyy, jolloin seuraavaa tehtävää varten joudutaan taas luomaan uusi prosessi.

      Linux -teoreetikot väittävät, että linuxin erilliset fork / exec olisivat jotenkin parempia kuin windowsin Createprocess.
      Mutta: yllämainitusta syystä tämä väite ei pidä paikkaansa.

      Toki, jos patchaisit käynnistämääsi ohjelmaa siten, että se Exit:in sijasta tekisikin: Exec("OmaKaynnistysApuohjelma") niin sitten...

      Mutta: olisiko se vaivan arvoista?
      Hieman nopeampi: kyllä

      Mutta: joutuisit patchaamaan jokaisen käynnistämäksesi aikomasi ohjelman erikseen, ja toistamaan työsi aina, kun ko. ohjelmasta tulee uusi versio.
      Liian vaivalloista, eikö?

      Ehkäpä juuri tästä syystä Windowsissa ei edes ole erillistä fork/exec -funktiota, vaan niiden sijasta tuo mainittu Createprocess.

      • parempia_ratkaisuja

        Prosessia ei ole mikään pakko päättää. Esim. firefox:n plugin-container toimii tällä tavalla: Jos containeria ei ole ajossa, se käynnistetään, muussa tapauksessa lähetetään viesti em. prosessille. Optimitapauksessa prosessi luodaan vain kerran - mikäli mikään plugin ei käytön seurauksena satu kaatumaan, jolloin jälkien korjaamisen asemasta tapahtuu uudelleen käynnistys ja firefox selviää kaatumatta!
        Fork on nopea, koska se oletuksena ei tee mitään! Huonosti toteutettua prosessien välistä kommunikaatiota ei mikään pelasta - jos joka kerta joutuu prosessin luomaan alusta, kun edellinen on lopetettu, niin se on hidasta. OTO prosessit(One-Time-Only) eivät tästä hidastu, mutta multithreading prosessit kyllä kärsivät.
        Helppo esimerkki, missä hyödyn näkee silmällä on levyn kopiointi-prosessi: On prosessi joka osaa lukea levyltä dataa ja kirjoittaa sitä takaisin toiseen paikkaan. Tätä se tekee vuoron perään. Nyt jos tälle prosessille tehdään rinnakkainen(identtinen) prosessi ja prosessit lähettelevät toisilleen dataa - on fork() mitä parhain toimintatapa. Prosessien pitää jakaa luku/kirjoitus puskuri. Lukeminen ja kirjoittaminen voidaan synkronoida _samassa_ koodissa. Tämä tarkoittaa sitä, että virhealttius vähenee. Se, lukeeko vai kirjoittaako prosessi on oikeastaan sivuseikka - se tekee aina sitä, mikä kulloinkin on järkevintä tehdä. Nopeusetu tulee selkeästi esiin siinä vaiheessa kun aletaan kopioida tiedostoja kahden eri levyn välillä - tai kun prosessit päätyvät eri ytimille ajoon. Esimerkin "järkevyyden" kumoaa tietysti levyn kirjoituspuskuri, koska synkroninen koodikin toimii tällöin maksiminopeudella eli levyjen kirjoitusnopeudella. Eikä tuollaista toteutettaisi eri prosesseihin - eri threadeihin korkeintaan.
        Monessa paikassa mahdollisuus tällaisiin "dobbel-gangereihin" tekee asioista nopeampia nykyisin kun coreja ja väylää riittää: Yhden coren koneissa se onkin sitten ohrasempi juttu.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Kalle Palander kertoi fantasioivansa siitä, kuinka Kiira Korpi naisi häntä sträppärillä ahteriin

      Sai potkut Yleltä. https://yle.fi/a/74-20140000
      Maailman menoa
      530
      8378
    2. Aamuseuraa/rehevää naista

      uhkean rehevät m-xxxl naiset/rouvat/pari 18-80v kutsu luokses 31.1 aamusta päiväpanoille 32v hetero mies.oon innokas nuo
      Keuruu
      4
      3582
    3. 24h Kirppis

      Olen muuttamassa paikkakunnalle ja mietin olisiko tälläiselle liikkeelle tarvetta alueella?
      Jämsä
      6
      1975
    4. Suomessa eletään liian pitkään

      "Ihmisten on kuoltava" Asiantuntija varoittaa: Suomi ei ole valmis siihen, että niin moni elää pitkään: ”Kaiken täytyy
      Maailman menoa
      156
      1091
    5. Kerotakaa joensuun kontiolahden paiholan laitoksesta jotain

      Mun kaveri joutuu paiholan laitokseen nyt lähi aikoina niin voisko ihmiset kertoa minkälaista siellä on tarinoita jne ja
      Joensuu
      17
      746
    6. Olen niin haaveillut

      Sinusta. Ollut hullun rakastunut. Ajatellut kaikkea mitä yhdessä voisimme tehdä. Mutta ei ei yhtään mitään. Usko vaan lo
      Ikävä
      57
      702
    7. Sun ulkonäkö on

      Kyllä viehättävä. Kauniit piirteet. Todella sievät. Ja olemus on ihana. Olet tehnyt vaikutuksen.
      Ikävä
      28
      653
    8. Oletko koskaan

      Tavannut/tuntenut ihmistä, jonka kanssa vuosisadan rakkaustarina olisi ollut mahdollinen, mutta joku este tuli väliin?
      Sinkut
      58
      633
    9. En voi ottaa

      Jos ikinä aiot ottaa yhteyttä, niin tee se nyt. On aika, kun todella todella tarvitsisin sinua. Naiselle.
      Ikävä
      36
      607
    10. Yllätyspaljastuksia uudesta Maajussille morsian -kaudesta! Vappu Pimiä sometti, myös MTV3:lta infoa

      No nyt on uusiakin tuulia Maajussille morsian -ohjelmassa. Kuka mahtaa olla tämä tuttu kasvo, joka jo toistamiseen lähte
      Maajussille morsian
      5
      579
    Aihe