bash-skript för att kontrollera om program körs?

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
ubot
Inlägg: 4613
Blev medlem: 04 jan 2008, 14:03
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

Re: bash-skript för att kontrollera om program körs?

Inlägg 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. :)
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: bash-skript för att kontrollera om program körs?

Inlägg 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?
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
m!rage
Inlägg: 2550
Blev medlem: 28 apr 2009, 21:47
OS: Arch Linux
Ort: Lund

Re: bash-skript för att kontrollera om program körs?

Inlägg 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.
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: bash-skript för att kontrollera om program körs?

Inlägg 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…
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: bash-skript för att kontrollera om program körs?

Inlägg 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.
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

Re: bash-skript för att kontrollera om program körs?

Inlägg 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.
ubot
Inlägg: 4613
Blev medlem: 04 jan 2008, 14:03
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

Re: bash-skript för att kontrollera om program körs?

Inlägg 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.
ubot
Inlägg: 4613
Blev medlem: 04 jan 2008, 14:03
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

Re: bash-skript för att kontrollera om program körs?

Inlägg 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?
Användarvisningsbild
Substrata
Inlägg: 71
Blev medlem: 13 apr 2010, 11:01
OS: Arch Linux
Utgåva: Vet inte/ingen utgåva passar

Re: bash-skript för att kontrollera om program körs?

Inlägg 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:

Kod: Markera allt

#!/bin/bash
echo $* > moo.out
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
Skriv svar

Återgå till "Terminalforum"