Bash-Skript - Trap-Funktion startet und beendet Conky

Natriumchlorid

Lt. Junior Grade
Registriert
Sep. 2013
Beiträge
433
Hey,

ich benötige einen Rat oder eine zweite Meinung zu meinem Bash-Skript. :D
Kurzum geht es um folgendes:

Normalerweise habe ich immer Conky im Hintergrund geöffnet, um mein System zu überwachen. Beim Zocken jedoch schalte ich conky aus, da es bei grafisch intensiven Spielen, wie etwa The Witcher 3, Cyberpunk 2077, usw., zu Stottern im Sekundentakt kommt. Sobald conky aus ist, laufen die Spiele butterweich.

Deshalb habe ich mir ein kleines Bash-Skript gebastelt, womit ich im Terminal das System weiterhin überwachen kann. Dieses Skript liest auch im Sekundentakt meine Temperaturen und Taktraten ab, jedoch merke ich davon im Spiel nichts. Es beeinflusst die Performance nicht.
Bash:
#!/bin/bash
kill -15 $(pidof conky)

[...]

clean_up() {
    qdbus org.kde.KWin /Compositor resume
    sleep 1
    conky -d
    exit
}

trap "clean_up" EXIT SIGTERM SIGINT

qdbus org.kde.KWin /Compositor suspend

while true
do
    get_values
    output=$(print_values)
    clear
    echo "$output"
    sleep 0.5
done
Ich habe mir noch kurz ein zweites Skript geschrieben, welches das obere Skript einfach im Hintergrund startet, da es permanent in der Loop hängt. Das soll beim Starten von einem Spiel ausgeführt werden.
Bash:
#!/bin/bash
konsole -e /home/alex/Dokumente/gpu2.sh&
exit
Mein Problem ist nun folgendes:
Wenn ich das neue Terminalfenster, in dem mein Skript gpu.sh ausgeführt wird, beende (mit STRG+C), dann startet conky nur für einen kurzen Moment. Das ist die eine Sekunde, die ich zum Debuggen reingehauen habe (sleep 1). Nach der Sekunde schließt conky wieder und ich kann mir einfach nicht erklären, warum sich das so verhält.

Der Compositor wird beendet und nach dem Beenden wieder gestartet, aber warum schließt conky wieder? Ich sag doch, dass es ganz normal als Daemon (-d) gestartet werden soll.

Ich hab noch ein kleines Video angehängt, damit man es besser nachvollziehen kann.

Wisst ihr wo der Wurm drin ist? :D
 

Anhänge

  • 2021-02-09 20-20-36.mp4
    1,3 MB
Spontan würde ich mal sagen, das Conky an das Terminal gebunden ist von dem Du das ausführst. Schließt Du das, schließt der Conky gleich mit.
Um dieses binding zu verhindern solltest Du Conky via nohup starten:
nohup conky -d

Manpage von nohup:
https://linux.die.net/man/1/nohup
 
  • Gefällt mir
Reaktionen: Natriumchlorid
Vielleicht werden Signale im Trap doch an Children weitergeleitet? Wer weiß. :)
Versuch mal nohup conky -d (gibt allerdings bestimmt bessere Lösungen...).
 
  • Gefällt mir
Reaktionen: Natriumchlorid
Das Interessante hierbei ist, dass wenn ich nur gpu.sh ausführe, und mit STRG+C beende, dann startet conky normal und alles verhält sich wie geplant.
Nur wenn ich das in Kombination mit dem Hilfsskript gamestart.sh ausführe, kommt es zu dem Fehlverhalten.

Nichtsdestotrotz:
Mit nohup funktioniert es nun tatsächlich so, wie ich es mir vorgestellt habe. Danke euch.:D

Habe das Skript auch etwas angepasst. Das Signalhandling ist jetzt etwas sinnvoller:
Bash:
clean_up() {
    qdbus org.kde.KWin /Compositor resume
    exit
}

trap "clean_up" SIGTERM SIGINT
trap "nohup conky -d > /dev/null" EXIT

qdbus org.kde.KWin /Compositor suspend

while true
do
    get_values
    output=$(print_values)
    clear
    echo "$output"
    sleep 0.5
done
 
Zurück
Oben