Befehl ausführen wenn ein Programm beendet wurde

FatManStanding

Lieutenant
Registriert
Aug. 2021
Beiträge
670
Hallo,

ich habe hier einen Super Mario-Klone unter Wine laufen, der leider mein Gamepad nicht zuverlässig erkennt. Ich muss das Gamepad über Antimicrox als Tastatur mappen, dann läuft alles. Das führt aber zu Problemen mit anderen Spielen. Ich habe mir ein Script geschrieben, dass
  1. das Spiel startet
  2. Antimicrox startet
  3. eine Funktion ausführt, die nicht weiter macht als in Endlosschleife zu prüfen ob der Prozess (das Spiel) noch läuft; wenn nicht wird Antimocro beendet
Da sist jetzt meine als Nicht-Programmierer zurechtgeschusterte Lösung. Geht das auch anders? Gibt es einen Mechanismus der ein Script ausführt wenn ein bestimmter Prozess gestartet oder beeendet wird? So eine Art inotifywait für Prozesse?
 
  • Gefällt mir
Reaktionen: KEV24in_Janßen
Eigentlich sollte es auch funktionieren wenn du in dem Skript das Spiel selbst startest und nach dem Spiel kommte der Befehl Antimicrox beendet (oder was auch immer danach passieren soll).

Das skript selbst führt erst den nächsten Befehl aus wenn der davor beendet ist - normales verhalten von Skripten.
 
  • Gefällt mir
Reaktionen: KEV24in_Janßen, AlphaKaninchen und NJay
Schau dir mal Lutris oder Heroic Launcher an, dort kannst du auch Konfigurieren, ob vor dem Start des Spiels und/oder beim beenden des Spiels ein Skript ausgeführt wird.

Zusätzlich hättest du dann eine GUI, über welches du dein Spiel starten könntest. :)
 
  • Gefällt mir
Reaktionen: Ja_Ge
Man kann es kaschieren, d.h. ein Skript mit gleichem Namen in einen Ordner mit höherer $PATH Priorität erstellen (z.B. /usr/local/bin/Mario.exe). Der Aufruf von 'Mario.exe' (die Endung ist in diesem Fall optisch falsch) startet dann das Skript anstelle der exe. Die eigentliche exe wird mit absolutem Pfad gestartet.

Man könnte vielleicht auch was mit systemd machen, das den Start der exe überwacht. Das ist aber eher mit Spatzen auf Kanonen schießen.
 
Zuletzt bearbeitet:
Mit dem Befehl waitpid kannst du auf das Ende eines Prozesses warten:
Bash:
/pfad/zum/Spiel
PID=$(pidof Prozessname) && waitpid $PID

Dieser Code funktioniert mit zwei Voraussetzungen: Zeile 1 kehrt sofort zurück und das Spiel läuft in einem anderen Prozess weiter (aber andernfalls bräuchtest du eh nicht so ein Konstrukt). Und Zeile 2 bekommt genau eine Zahl zurück.
 
Zuletzt bearbeitet: (Ups, falscher Befehl im Skript)
Donnerkind schrieb:
Mit dem Befehl waitpid kannst du auf das Ende eines Prozesses warten:
Bash:
/pfad/zum/Spiel
PID=$(pid Prozessname) && waitpid $PID
Das waitpid kann man sich schenken wen man den Prozess nicht in den Hintergrund schickt.
Bash:
echo Start
/pfad/zum/Spiel
echo Ende
 
  • Gefällt mir
Reaktionen: andy_m4
Richtig, an diese Möglichkeit dachte ich auch – Gamelauncher und so. Aber dann wäre dieser ganze Faden hinfällig, weil der TE dann das originäre Problem gar nicht hätte.
 
Den Prozess im Hintergrund auszuführen ist ja nicht das Thema. Das mache ich ja bei meiner o.g. zusammengebastelten Lösung auch so.

Mal sehen vllt. nutze ich auch einen der genannten launcher. Könnte man mit einem shortcut starten.
 
FatManStanding schrieb:
Den Prozess im Hintergrund auszuführen ist ja nicht das Thema.
Vielleicht solltest Du dann mal klarstellen, was das Thema ist und ob die hier genannten Lösungsansätze Dein Problem beheben oder nicht.
 
Zurück
Oben