etualelle korkeampi prioriteetti?

Anonyymi

Miten Linuxissa saa juuri nyt päälimmäisenä olevan ikunan ohjelmalle automaattisesti korkeamman prioriteetin?
Tällä saisi käytettävyyttä paremmaksi.

Windowsissa on tähän asetus mutta Linuxista en ole löytänyt. Itellä käytössä Mint, Ubuntu ja Rasbian.

10

364

    Vastaukset 10

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Anonyymi

      Ei kyllä saisi. Skedulerilla on algoritmi, joka painottaa prosesseja joilla on eniten tekemistä - idlaajia siis skeduloidaan vähemmän. Tästä seuraa, että päällimäinen ikkuna saa eniten ajoaikaa, mikäli se sitä tarvitsee. Asian huomaa helposti ajamalla esim. virtualboxia etualalla ja sitten siirtämällä sen taustalle: Kestää aika pitkään, koska ohjelman muistijälki ja käyttämä cpu-teho on niin isoja.
      Jos sinulla on kaksi prosessia haukkaamassa resursseja, tapahtuu näille siten automaattisesti tasajako. Käynnistyksen yhteydessä voi tosin kertoa, kuinka paljon haluaa prosessia suosia nice-komennolla - ja sitäkin voi muuttaa jälkeenpäin renice-komennolla. Sen sijaan ikkunaan sidottu prioriteetin nosto huonontaa käytettävyyttä - ikkunasta ei pääse eroon. Mietipä vaikka pop-up mainosta, jonka klikkaaminen kestää pois kauan? Ei kovin mukavaa ja siksi sen tekeminen ei ole automaattista vaan käyttäjä joutuu itse virittelemään tuollaiset epäkelvot toteutukset jos niille tulee tarvetta: Oikeampi tapa on jakaa prosesseja osiin ja priorisoida tarpeen mukaan!

    • Anonyymi

      En tiedä onko tuohon mitään valmista ratkaisua, mutta ehkä sellaisen saisi tehtyä skripitllä, joka pyörisi taustalla, ja säätelisi nice-arvoa aktiivisena olevalle ikkunalle.

      Pitää vaan sitten pitää kirjaa mille ikkunalle on muuteltu, jotta arvo muutetaan takaisin oletukseen ikkunan vaihtuessa.

      Ikkunan PID-arvon saa luettua komentosarjalla.

      xprop | grep _NET_WM_PID | awk -F' ' '{print $NF}'

      Tuo siis odottaa hiiren klikkausta, ja palauttaa PID-arvon.

      Renice-komennolla saa muutettua prioriteettiä PID-arvon perusteella. Tulosteesta näkee vanhan prioriteetin, jonka voi sitten ottaa jemmaan palautusta varten.

      https://www.geeksforgeeks.org/priority-of-process-in-linux-nice-value/

    • Anonyymi

      Minulla on Linuxissa yleensä käytössä 3 tai 4 virtuaalityöpöytää jolloin ei ole päällekkäisiä ikkunoita ( jos ei halua käyttää).

    • Anonyymi

      Tuossa yksi vähän typerä tapa nostaa hetkeksi aktiivisen (klikatun) ikkunan NICE-arvoa. Skriptin DELAY-muuttujassa on arvo, minkä aikaa pidetään uutta NICE-arvoa. Lopuksi skripti ajetaan uudelleen. Pitää ajaa roottina, eli vaikka sudolla, koska NICE-arvon vähennys vaatii root-oikeudet. Tallentaa siis ensin skriptin jollain nimellä, ja tekee siitä sitten suoritettavan chmod x:llä. Sitten sudo skripti.sh.

      #!/usr/bin/env bash
      DELAY=5
      NEWNICE=10
      PID=$(xprop | grep _NET_WM_PID | awk -F' ' '{print $NF}')
      OLDNICE=$(ps -o ni= -p ${PID})
      renice ${NEWNICE} ${PID}
      echo Sleeping...
      sleep ${DELAY}
      renice ${OLDNICE} ${PID}
      exec $(readlink -f "$0")

      • Anonyymi

        Tämä pitäisi muuttaa kaksiosaiseksi skriptiksi, joista toisessa luettaisiin silmukassa viimeksi klikatun ikkunan PID xprop-komennon avulla, ja tallennettaisiin se tiedostoon.

        Toinen skripti huolehtisi prioriteetin muuttamisesta, joka suoritettaisiin esimerkiksi muutaman sekunnin välein. Siinä tallennettaisiin muuttujaan edellisellä kerralla käsittelyssä ollut PID ja sen prioriteetti.

        Ensin luetaan ensimmäisen skriptin tiedostosta käsittelyyn tuleva PID. Jos se on sama kuin edellisellä kerralla, niin ei tehdä mitään. Jos taas eri, niin muutetaan muuttujaan tallennetun edellisen PID:n prioriteetti ennalleen, ja asetetaan uusi PID muuttujaan, ja muutetaan sen prioriteetti.

        Tuohon ensimmäiseen skriptiin olisi mahdollista tehdä myös filtteröintiä, joka esimerkiksi rajaisi prioriteettimuutokset vain käyttäjän sovelluksiin.


      • Anonyymi
        Anonyymi kirjoitti:

        Tämä pitäisi muuttaa kaksiosaiseksi skriptiksi, joista toisessa luettaisiin silmukassa viimeksi klikatun ikkunan PID xprop-komennon avulla, ja tallennettaisiin se tiedostoon.

        Toinen skripti huolehtisi prioriteetin muuttamisesta, joka suoritettaisiin esimerkiksi muutaman sekunnin välein. Siinä tallennettaisiin muuttujaan edellisellä kerralla käsittelyssä ollut PID ja sen prioriteetti.

        Ensin luetaan ensimmäisen skriptin tiedostosta käsittelyyn tuleva PID. Jos se on sama kuin edellisellä kerralla, niin ei tehdä mitään. Jos taas eri, niin muutetaan muuttujaan tallennetun edellisen PID:n prioriteetti ennalleen, ja asetetaan uusi PID muuttujaan, ja muutetaan sen prioriteetti.

        Tuohon ensimmäiseen skriptiin olisi mahdollista tehdä myös filtteröintiä, joka esimerkiksi rajaisi prioriteettimuutokset vain käyttäjän sovelluksiin.

        Työkalu "xdotool" on parempi tapa selvittää PID, koska xprop vaatii näköjään ikkunan klikkaamista aktiivisesti. Sen asentamisen jälkeen saa aktiivisen ikkunan komennolla:

        xdotool getactivewindow getwindowpid


      • Anonyymi
        Anonyymi kirjoitti:

        Työkalu "xdotool" on parempi tapa selvittää PID, koska xprop vaatii näköjään ikkunan klikkaamista aktiivisesti. Sen asentamisen jälkeen saa aktiivisen ikkunan komennolla:

        xdotool getactivewindow getwindowpid

        Uusi versio, joka selvittää DELAY:n välein mikä ikkuna on aktiivinen, ja vaihtaa sen prioriteettia ACTIVE_NICE_DIFF verran plussalle. Lisätty myöt ctrl-c trappi, jotta lopettaessa palautetaan aktiisena olevan ikkunan prioriteetti alkuperäiseen.

        #!/usr/bin/env bash
        DELAY=5
        ACTIVE_NICE_DIFF=10
        PREV_PID=$(xdotool getactivewindow getwindowpid)
        PREV_NICE=$(ps -o ni= -p ${PREV_PID})
        renice $(($PREV_NICE $ACTIVE_NICE_DIFF)) $PREV_PID

        trap ctrl_c INT

        ctrl_c() {
        renice $(($PREV_NICE)) $PREV_PID
        exit 0
        }


        loop () {
        sleep $DELAY
        NEW_PID=$(xdotool getactivewindow getwindowpid)
        NEW_NICE=$(ps -o ni= -p ${NEW_PID})
        if [ $NEW_PID -ne $PREV_PID ]; then
        renice $(($PREV_NICE)) $PREV_PID
        PREV_PID=$NEW_PID
        PREV_NICE=$NEW_NICE
        renice $(($PREV_NICE $ACTIVE_NICE_DIFF)) $PREV_PID
        fi
        loop
        }

        loop


      • Anonyymi
        Anonyymi kirjoitti:

        Uusi versio, joka selvittää DELAY:n välein mikä ikkuna on aktiivinen, ja vaihtaa sen prioriteettia ACTIVE_NICE_DIFF verran plussalle. Lisätty myöt ctrl-c trappi, jotta lopettaessa palautetaan aktiisena olevan ikkunan prioriteetti alkuperäiseen.

        #!/usr/bin/env bash
        DELAY=5
        ACTIVE_NICE_DIFF=10
        PREV_PID=$(xdotool getactivewindow getwindowpid)
        PREV_NICE=$(ps -o ni= -p ${PREV_PID})
        renice $(($PREV_NICE $ACTIVE_NICE_DIFF)) $PREV_PID

        trap ctrl_c INT

        ctrl_c() {
        renice $(($PREV_NICE)) $PREV_PID
        exit 0
        }


        loop () {
        sleep $DELAY
        NEW_PID=$(xdotool getactivewindow getwindowpid)
        NEW_NICE=$(ps -o ni= -p ${NEW_PID})
        if [ $NEW_PID -ne $PREV_PID ]; then
        renice $(($PREV_NICE)) $PREV_PID
        PREV_PID=$NEW_PID
        PREV_NICE=$NEW_NICE
        renice $(($PREV_NICE $ACTIVE_NICE_DIFF)) $PREV_PID
        fi
        loop
        }

        loop

        Kohta viisi tuntia jauhanut tuo skripti taustalla, eikä ainakaan ole kone sekoillut, joten vaikuttaisi toimivan kuten pitääkin. Htopilla olen seurannut miten nice-arvo muuttuu.

        Seuraavassa evoluutiossa voisi lisätä kirjanpidon, joka näyttäisi lopuksi ctrl-c:n jälkeen kuinka pitkään mikäkin PID on ollut ylipriorisoituna.


      • Anonyymi
        Anonyymi kirjoitti:

        Kohta viisi tuntia jauhanut tuo skripti taustalla, eikä ainakaan ole kone sekoillut, joten vaikuttaisi toimivan kuten pitääkin. Htopilla olen seurannut miten nice-arvo muuttuu.

        Seuraavassa evoluutiossa voisi lisätä kirjanpidon, joka näyttäisi lopuksi ctrl-c:n jälkeen kuinka pitkään mikäkin PID on ollut ylipriorisoituna.

        Hulluilla halvat huvit..


    • Anonyymi

      Versio joka kirjaa ylös mille PID:lle on annettu kuinkakin pitkään isompaa prioriteettiä. Tulostusta ei ole mitenkään järjestelty, ja tuollainen dictionary-tyyppinen array vaatii kait vähintään BASH 4.0:n. Alla esimerkkituloste muutaman ikkunanvaihdon jälkeen, ja perässä skripti, joka nimetty tässä nice.sh:ksi. Lopetus siis ctrl c:llä.

      $ sudo ./nice.sh
      20804 (process ID) old priority 0, new priority 10
      20804 (process ID) old priority 10, new priority 0
      29229 (process ID) old priority 0, new priority 10
      29229 (process ID) old priority 10, new priority 0
      2087 (process ID) old priority 0, new priority 10
      2087 (process ID) old priority 10, new priority 0
      36370 (process ID) old priority 0, new priority 10
      36370 (process ID) old priority 10, new priority 0
      2087 (process ID) old priority 0, new priority 10
      2087 (process ID) old priority 10, new priority 0
      20804 (process ID) old priority 0, new priority 10
      ^C20804 (process ID) old priority 10, new priority 0
      PID TIME PROCESS NAME
      2087 55 firefox
      20804 40 qterminal
      29229 5 qterminal
      36370 10 kcalc

      --
      #!/usr/bin/env bash
      DELAY=5
      ACTIVE_NICE_DIFF=10
      PREV_PID=$(xdotool getactivewindow getwindowpid)
      PREV_NICE=$(ps -o ni= -p ${PREV_PID})
      renice $(($PREV_NICE $ACTIVE_NICE_DIFF)) $PREV_PID
      ARR[$PREV_PID]=$((${ARR[$PREV_PID]} $DELAY))

      trap ctrl_c INT

      ctrl_c() {
      renice $PREV_NICE $PREV_PID
      echo -e "PID\tTIME\tPROCESS NAME"
      for key in ${!ARR[@]}; do
      echo -e "${key}\t${ARR[${key}]}\t$(ps -p ${key} -o comm=)"
      done
      exit 0
      }


      loop () {
      sleep $DELAY
      NEW_PID=$(xdotool getactivewindow getwindowpid)
      NEW_NICE=$(ps -o ni= -p ${NEW_PID})
      if [ $NEW_PID -ne $PREV_PID ]; then
      renice $PREV_NICE $PREV_PID
      PREV_PID=$NEW_PID
      PREV_NICE=$NEW_NICE
      renice $(($PREV_NICE $ACTIVE_NICE_DIFF)) $PREV_PID
      fi
      ARR[$PREV_PID]=$((${ARR[$PREV_PID]} $DELAY))
      loop
      }

      loop

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

    Luetuimmat keskustelut

    1. Venäjä alkaa iskemään Suomen politiikkaan.

      Tässä on valtion ja koko länsiliiton päämiehet varoitelleet, että Venäjä alkaa talven aikana taas iskemään hybridisesti.
      Sinkut
      180
      1022
    2. Ajattelitko ikinä pyytää anteeksi?

      Tiedät kyllä mistä.
      Ikävä
      77
      687
    3. Muistelen lämmöllä

      Se oli vaikein päätös, jonka olen joutunut tekemään. En pidä valehtelusta, mutta näin sait päätöksen asioille. Rakasti
      Ikävä
      48
      672
    4. Tunnistan mun rakkaan

      Kirjoituksen heti kun se on täällä. Mä vaan tiedän sen ja tunnen 🤗
      Ikävä
      81
      581
    5. Miten oletkin noin

      osaamaton kaikin tavoin :)
      Ikävä
      39
      549
    6. Tyrkytät ittees liian

      tasokkaille :)
      Ikävä
      46
      530
    7. Pakko myöntää mies

      En mä aina ihan rehellinen sulle ollut
      Ikävä
      106
      530
    8. Uskon, että saataisiin kaikki selvitettyä

      Mutta yhteys on jäissä, minä olen jäässä, enkä osaa tai uskalla enää lähestyä. Se vaan on niin. Naiselta Jos ei ole hyvä
      Ikävä
      37
      513
    9. Jos olen aiheuttanut pahaa, pyydän anteeksi

      Jos olen omalla kirjoittelullani aiheuttanut täällä jollekin pahaa mieltä tai sotkenut asioita, niin pyydän sitä anteeks
      Ikävä
      64
      499
    10. Teinipersu Bergbom lupasi ensimmäisenä euron bensaa

      Teinipersu julkaisi Tiktok-videonsa marraskuussa 2021. Videolla Bergbom viittaa bensan hintoja esittelevään kylttiin ja
      Maailman menoa
      288
      494
    11. Odotan tosi paljon et nähdään uudelleen

      Sinussa on piirteitä, jotka sai kiinnostumaan.
      Ikävä
      21
      488
    12. Sysmän "ilon päivä"

      Ja taas palaa hirveä määrä verorahoja, ihan turhaan soopaan. Eikö nämä jotka kuntapolitiikassa valittavat ja tuhoaa vaan
      Sysmä
      36
      485
    13. Onko se loukkaavaa jos pelkkä seksi kiinnostaa?

      En tiedä olisiko meillä muuta yhteistä edes. En kyllä oikein osaa nähdä meitä menemässä naimisiin, paitsi ehkä jossain U
      Ikävä
      47
      474
    14. Vaihdevuodet ja psykoottinen käytös

      Estrogeenilla on suora yhteys aivojen välittäjäaineisiin, erityisesti serotoniiniin, joka säätelee mielialaa, impulssiko
      Suomussalmi
      37
      441
    15. Luottamus

      Luotan vain siihen mitä tapahtuu IRL. Anonyymipalstan vihjailut eivät merkitse minulle mitään.
      Ikävä
      91
      436
    16. 21
      422
    17. Timo Vornanen.

      On siinäkin yksi täystampio. Eipä ihme, että persukannattajat sen eduskuntaan äänestikin.
      Maailman menoa
      26
      420
    18. Joka ilta mietin

      sua❤️Mitä teet, missä meet? Kaipaatko yhtään? Yön tullen toivotan mielessäni sulle hyvää yötä ja aamuisin huomenet. Joka
      Ikävä
      24
      416
    19. Sofia ja Jeffrey yhdessä

      Sofia julkaisi instassa kuvan hänestä ja Jeffreystä kuvan, taustalla soi Happy birthday biisi ja Jeffrey kasvot peitetty
      Kotimaiset julkkisjuorut
      80
      415
    20. Hallituksen järjestämä spektaakkeli tuo vessanpyttykeissi

      Että olisi kymmenien kansanedustajien kodeissa käyty ihan tuosta vaan, eikä kukaan kansanedustaja kerro niin käyneen, va
      Maailman menoa
      142
      414
    Aihe