Sida 2 av 2
Re: bash-skript för att kontrollera om program körs?
Postat: 11 nov 2010, 19:03
av ubot
jag testade precis med två flikar i Terminalen. I dne ena körde jag kommandot top och i den andra raden while true; do echo "Hello World"; done
CPU i top rusade från 10% till 67% ganska snabbt. Jag testade på en netbook med n450 Intel Atom-prolle. Så nog belastar det CPU alltid om man inte har med sleep.

Re: bash-skript för att kontrollera om program körs?
Postat: 11 nov 2010, 19:50
av Johnny Rosenberg
m!rage skrev:Jag beskrev bara hur nice fungerar. Detta skriptet verkar dock ganska harmlöst om det bara uppdaterar en gång i sekunden.
Men hur fungerar sleep egentligen? Den borde ju kolla mot systemklockan lite då och då för att veta när angiven tid förflutit, eller hur fungerar det egentligen?
Re: bash-skript för att kontrollera om program körs?
Postat: 11 nov 2010, 20:02
av m!rage
Jag vet faktiskt inte. Kanske gör det att tråden (programmet) lämnar ifrån sig processorn och anger att det inte behöver anropas igen förrän om en viss tid.
Re: bash-skript för att kontrollera om program körs?
Postat: 11 nov 2010, 20:55
av Johnny Rosenberg
m!rage skrev:Jag vet faktiskt inte. Kanske gör det att tråden (programmet) lämnar ifrån sig processorn och anger att det inte behöver anropas igen förrän om en viss tid.
Men någonting måste ju ändå hålla reda på när tiden gått…
Re: bash-skript för att kontrollera om program körs?
Postat: 11 nov 2010, 21:03
av Konservburk
Johnny Rosenberg skrev:Men någonting måste ju ändå hålla reda på när tiden gått…
Detta
någonting kallas för kärnan.
Re: bash-skript för att kontrollera om program körs?
Postat: 11 nov 2010, 22:54
av mcNisse
ubot skrev:mcNisse skrev:Det belastar inget om du har en sleep i den. Går loopen i spin och kör som en tok så är läget helt annorlunda.
Även om loopen ser ut så här?
while true; do
echo "Hello World"
done
Även om loopen är jättesimpel men saknar sleep?
Det där är ett bra exempel på en dålig loop.
Re: bash-skript för att kontrollera om program körs?
Postat: 11 nov 2010, 23:04
av ubot
mcNisse skrev:ubot skrev:mcNisse skrev:Det belastar inget om du har en sleep i den. Går loopen i spin och kör som en tok så är läget helt annorlunda.
Även om loopen ser ut så här?
while true; do
echo "Hello World"
done
Även om loopen är jättesimpel men saknar sleep?
Det där är ett bra exempel på en dålig loop.
Jo, jag testade ju och processorn rusade för fullt.
Re: bash-skript för att kontrollera om program körs?
Postat: 12 nov 2010, 10:34
av ubot
Jag hinner inte ta tag i det här nu men tanken är väl att någon gång skriva ett python-skript som startas från XBMC och först stänger ner XBMC för att därefter öppna Spotify. Skriptet ska då fortfarande vara aktivt och om Spotify stänger ner så öppnas XBMC igen.
Problemet med lösningen while true; do xbmc; spotify; done är att det kanske strular när man stänger av datorn och loopen rullar på helt okontrollerat? Det kanske går att kontrollera om en avstängnings/omstarts-signal har skickats till systemet mellan kommandot xbmc och spotify?
Re: bash-skript för att kontrollera om program körs?
Postat: 13 nov 2010, 12:51
av Substrata
ubot skrev:2. Jag försöker exekvera bash-skriptet genom att bina en keyboard shortcut till skriptet men det verkar som om XBMC på något sätt stänger av tangentbordsgenvägarna i Ubuntu när man kör XBMC i fullscreen? Hur ska jag göra för att köra ett bash-skript i XBMC?
Frågan är varför du vill se kedjan XBMC -> script -> Spotify. Kika på strukturen här: XBMC och Spotify körs av scriptet, som körs av XBMC, som också körs av scriptet... Så vad händer exempelvis när XBMC startar scriptet, efter att scriptet startat XBMC på nytt? Du kan lösa flertalet potentiella problem genom att låta scriptet påbörja kedjan och sköta processernas turordning. Exempelvis kan du fortfarande ha ett script i XBMC som pratar med huvudscriptet.
Här är ett fulhack som öppnar en named pipe genom vilken man kan skicka "next" så att scriptet byter process.
Kod: Markera allt
#!/bin/bash
FIFO="/tmp/xbmc-spotify-controller"
tasks[0]="./moo.sh 1"
tasks[1]="./moo.sh 2"
taskindex=0
next_task() {
[[ -n $COPROC_ID ]] && \
kill -QUIT $COPROC_PID && \
wait $COPROC_ID
coproc ${tasks[$taskindex]}
((++taskindex >= ${#tasks[@]})) && taskindex=0
}
mkfifo $FIFO
while read w < $FIFO
do [[ $w == "next" ]] && next_task
done
moo.sh:
Testkörning:
Kod: Markera allt
(~)% echo next > /tmp/xbmc-spotify-controller && cat moo.out
1
(~)% echo next > /tmp/xbmc-spotify-controller && cat moo.out
2
(~)% echo next > /tmp/xbmc-spotify-controller && cat moo.out
1