Mitä exec tekee

Sudottelija

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

9

370

    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. SDP jo 100 % suositumpi kuin persut

      Kertoo Hesarin uusin kannatuskysely. Demareiden kannatus on miltei tuplat verrattuna persuihinl. Suomen kansa ei selväst
      Maailman menoa
      146
      10937
    2. Mikä tämä henkilö mahtaa touhuta Parkanossa

      Kamalaa https://www.ylasatakunta.fi/teksti/pirkanmaan-karajaoikeus-vangitsi-koiran-tappamisesta-epaillyn-6.68.127794.b58
      Parkano
      62
      3816
    3. Ikävä sinua mies

      Vuosia kuluu, mutta tunteet ei ole hävinnyt. Tasoittuneet toki, kun ei olla nähty. Järki palannut päähän kuitenkin. Se i
      Ikävä
      39
      3673
    4. Orpo: Velkajarrua vastustavaa puoluetta vaikea ajatella hallitukseen

      No Minja Koskelan kommunistipuolue jäi ulos tuosta. Kaikki eduskuntapuolueet vasemmistoliittoa lukuun ottamatta sopivat
      Maailman menoa
      186
      3574
    5. PS ylivoimainen nousija myös HS:n gallupissa, SDP laskee taas

      https://www.verkkouutiset.fi/a/hs-gallup-sdpn-suosio-laskee-ps-nousussa/#0a7d2507 Ylivoimainen viime kuukausien nousija
      Maailman menoa
      100
      3441
    6. Valtavasti suomalaisia asunnottomina, mutta ei yhtään somalia

      tai muuta kehitysmaalaista. Mites tässä näin kävi? Tiedän hyvin, että esim. somaleita lentää ulos mm. Hekan asunnoista,
      Maailman menoa
      86
      3227
    7. Hienoa! Eduskunta luopui käteisen käytöstä

      Nyt tuo sama muutos pitää saada myös muuhun yhteiskuntaan. Käteistähän ei tarvitse tänä päivänä enää kuin rikolliset.
      Maailman menoa
      69
      1904
    8. Maajussi-Ville herättää kysymyksiä - Etsiikö oikeasti rakkautta vai mainostaako oliiviöljyä?

      Mitä mieltä olet: etsiikö Ville rakkautta vai mainostaako oliiviöljyään? Maajussille morsian -ohjelmassa yksi maajusseis
      Maajussille morsian
      15
      1227
    9. Kovia syytöksiä Stefan Thermaninsta.

      Jättänyt taas maksamatta kohuliikemies, hupparit ja muita ostamiaan tavaroita. On soiteltu liikkeestä ja Stefan iskenyt
      Kotimaiset julkkisjuorut
      154
      905
    10. Totuuspuolueen johtaja Jaana "prinsessa Leia" Kavonius on vangittu

      Kavonius määrättiin jo keväällä 2024 poissaolevana vangittavaksi todennäköisin syin epäiltynä 13 vainoamisesta ja 24 kun
      Maailman menoa
      263
      876
    Aihe