[#gelöst] Killall funktioniert in Script nicht

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
Delld
Beiträge: 14
Registriert: 09.08.2017 14:42:10

[#gelöst] Killall funktioniert in Script nicht

Beitrag von Delld » 28.05.2023 00:35:53

Hallo Gemeinde,

ich befasse mich als Neuling mit dem Thema eines eigenen Scripts und bin auf einen Punkt gekommen den ich nicht verstehe.

Zur Anwendung:
Es ist ein Debian11 installiert auf einem Laptop.

Eine Datei mit dem Namen quer.sh wurde erstellt und mit chmod +x ausführbar gemacht.

Im Script soll in EOG ein PDF nach dem Neustart geöffnet werden und 15 Sekunden anzeigen, danach soll EOG sich wieder selbst schließen.

Code: Alles auswählen

	#! /bin/bash
		eog /home/user/Dokumente/xxxx.pdf
		
		sleep 15
		
		killall -9 eog
	


Der erste Teil des Öffnens funktioniert aber dann bleibt es hängen und schließt sich nicht selbst.
In einem weiteren Terminal kann ich unter dem User Profil die App mit killall-9 eog abschießen.

Im Scipt funktioniert aber weder :
- killall
- killall -9
- pkill ( -9)

Weshalb wird nach 15 Sekunden die App nicht beendet und was ist da zu tun damit die App sich schließt ?

PS: Weiß jemand eine Seite auf Deutsch die für Einsteiger geeignet ist ?

Mit bestem Dank im Voraus.
delld
Zuletzt geändert von Delld am 29.05.2023 02:33:33, insgesamt 1-mal geändert.

Benutzeravatar
GregorS
Beiträge: 2597
Registriert: 05.06.2008 09:36:37
Wohnort: Freiburg
Kontaktdaten:

Re: Killall funktioniert in Script nicht

Beitrag von GregorS » 28.05.2023 01:16:25

Delld hat geschrieben: ↑ zum Beitrag ↑
28.05.2023 00:35:53
Weshalb wird nach 15 Sekunden die App nicht beendet und was ist da zu tun damit die App sich schließt ?
Der Grund ist, dass der sleep-Befehl erst nach Beenden von eog aufgerufen wird. Damit die Ausführung von sleep quasi gleichzeitig mit eog beginnt, musst Du eog sozusagen als „eigenen Job“ ausführen. Dazu fügst Du einfach ein &-Zeichen an:

Code: Alles auswählen

eog &
Dann wird eog gestartet und gleich mit dem sleep fortgefahren. Wenn dann die 15 Sekunden vorbei sind, hat kill auch etwas zum Töten.

HTH

Gregor
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])

Benutzeravatar
heisenberg
Beiträge: 3548
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Killall funktioniert in Script nicht

Beitrag von heisenberg » 28.05.2023 02:27:39

Etwas präziser wäre dann noch:

Code: Alles auswählen

#! /bin/bash
eog /home/user/Dokumente/xxxx.pdf &
sleep 15
kill -9 %1
Das %1 schießt den in den Hintergrund gesetzten Prozess ab. Beim Regex könnte es theoretisch ja auch etwas anders treffen. Davon kann es grundsätzlich mehrere geben, was hier aber nicht der Fall ist.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

uname
Beiträge: 12072
Registriert: 03.06.2008 09:33:02

Re: Killall funktioniert in Script nicht

Beitrag von uname » 28.05.2023 06:22:06

Schau mal hier. Vielleicht kannst oder musst du $! verwenden.

tobo
Beiträge: 1991
Registriert: 10.12.2008 10:51:41

Re: Killall funktioniert in Script nicht

Beitrag von tobo » 28.05.2023 09:48:13

uname hat geschrieben: ↑ zum Beitrag ↑
28.05.2023 06:22:06
Schau mal hier. Vielleicht kannst oder musst du $! verwenden.
Beides ist auf die aktuelle Shell (das Skript) bezogen - %1 meint dabei den ersten und $! den letzten registrierten Hintergrundprozess. $! ist da vielleicht sprachlich genauer, aber wenn nur ein Hintergrundprozess ausgeführt wird, dann ändert das nichts am Ergebnis.

Delld
Beiträge: 14
Registriert: 09.08.2017 14:42:10

[gelöst] Killall funktioniert in Script nicht

Beitrag von Delld » 29.05.2023 02:30:56

Hallo Gemeinde,

meine ganz herzlichen Dank an Euch alle für Eure Unterstützung, die Hinweise haben mich weiter gebracht.

Noch eine Frage bezüglich Scripten, ich möchte mich weiter einarbeiten in die Materie.
Ist einem von euch eine Seite oder Literatur bekannt wo Beispiele und Erläuterungen veröffentlicht sind, die das Lernen erleichtern.
Vorzugsweise in Deutsch ?

Herzlichen Dank nochmals
Delld

Benutzeravatar
heisenberg
Beiträge: 3548
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: [#gelöst] Killall funktioniert in Script nicht

Beitrag von heisenberg » 29.05.2023 03:24:55

Eine Möglichkeit gut Shellprogrammierung zu lernen, ist mit ChatGPT. Du kannst das System um Beispiellösungen bitten. Umso präziser Du fragst, um so präziser ist die Antwort. Z. B.:
Bitte erstelle ein Beispielprogramm in der Bash Shell, dass 2 Werte vom Benutzer einliest und dann mit diesen beiden Zahlen Grundrechenarten demonstriert.
Du kannst Dir da z. B. einzelne Thematiken erklären lassen, z. B. Arbeiten mit Variablen und Arrays, Prozesssteuerung, Funktionen, Kommandozeilenparamter ...

Du kannst auch ein Skript einliefern und kannst um Erklärung bitten.

Z. B. :

Code: Alles auswählen

Kannst Du mir das folgende Shellscript erklären?

#! /bin/bash
eog /home/user/Dokumente/xxxx.pdf &
sleep 15
kill -9 %1

Code: Alles auswählen

Ja, gerne erkläre ich dir das Shellscript Schritt für Schritt:

#! /bin/bash: Diese Zeile ist der sogenannte "Shebang" und gibt an, dass 
das Skript mit der Bash-Shell ausgeführt werden soll.

eog /home/user/Dokumente/xxxx.pdf &: Diese Zeile startet das Programm "eog" (Eye of GNOME), 
einen Bildbetrachter, um das PDF-Dokument  "xxxx.pdf" anzuzeigen. Der Pfad zum Dokument ist 
"/home/user/Dokumente/xxxx.pdf". Das "&" am Ende der Zeile sorgt dafür, dass der Befehl im 
Hintergrund ausgeführt wird, sodass die Shell sofort zur nächsten Zeile übergehen kann, ohne auf 
die Beendigung des Programms zu warten.

sleep 15: Diese Zeile verursacht eine Pause von 15 Sekunden. Das Skript wartet hier, um sicherzustellen, 
dass das PDF-Dokument genügend Zeit hat, um im Bildbetrachter geöffnet zu werden und vollständig 
angezeigt zu werden.

kill -9 %1: Diese Zeile sendet ein Signal zum Beenden des Prozesses mit der Jobnummer 1. Der Prozess 
mit der Jobnummer 1 ist der zuvor gestartete Bildbetrachter "eog". Das Signal "-9" gibt an, dass das Programm 
sofort beendet werden soll, ohne auf eine ordnungsgemäße Beendigung zu warten.

Zusammengefasst öffnet dieses Shellscript das PDF-Dokument "xxxx.pdf" mit dem Bildbetrachter "eog", 
wartet 15 Sekunden und beendet dann den Bildbetrachter. Es ist wahrscheinlich so konzipiert, dass das 
PDF-Dokument automatisch für eine bestimmte Zeit angezeigt wird, bevor es automatisch geschlossen 
wird.
Grundsätzlich ist ChatGPT aktuell noch fehlerbehaftet. D. h. es besteht eine gewisse Chance, dass die Ergebnisse schlicht falsch sind. Wenn z. B. gelieferte Programme Fehler enthalten, kann man das schreiben und um eine korrigierte Version bitten. Grundsätzlich gilt: Umso komplexer die Aufgabenstellung, umso höher die Wahrscheinlichkeit, dass die Antwort fehlerhaft ist.

Man kann auch um eine Bewertung des Programmes bitten, sowie um Verbesserungsvorschläge.

Zu allem kann man immer interaktiv nachfragen, wenn man ein Detail genauer wissen möchte und weitere Erklärungen möchte.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Benutzeravatar
GregorS
Beiträge: 2597
Registriert: 05.06.2008 09:36:37
Wohnort: Freiburg
Kontaktdaten:

Re: [gelöst] Killall funktioniert in Script nicht

Beitrag von GregorS » 29.05.2023 04:59:42

Delld hat geschrieben: ↑ zum Beitrag ↑
29.05.2023 02:30:56
Noch eine Frage bezüglich Scripten, ich möchte mich weiter einarbeiten in die Materie.
Ist einem von euch eine Seite oder Literatur bekannt wo Beispiele und Erläuterungen veröffentlicht sind, die das Lernen erleichtern.
„Scripten“ ist quasi „Programmieren in einer bestimmten Programmiersprache“. Wenn Du einen ganz allgemeinen Einstieg suchst, mach Dich z.B. zu Kontrollstrukturen (Schleife, Verzweigung, Fallunterscheidung ...) schlau. Genaues dazu findest Du z.B. in der Doku der „Shell“ (z.B. man bash).
Ansonsten heißt Scripten halt, sich gut mit einzelnen Hilfsprogrammen auszukennen und „Piping“ zu verstehen. Hilfsprogramme sind z.B. cut, rev, grep und viele weitere.
In den meisten Fällen kommst Du mit „man <programmname>“ schon sehr weit. Ganz allgemein ist auch das Mitlesen hier mitunter sehr lehrreich.

Gruß

Gregor

PS: Guck z.B. da: https://www.debian.org/doc/index.de.html. Da gibt's auch einen „Spickzettel“ zum Ausdrucken.
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])

Delld
Beiträge: 14
Registriert: 09.08.2017 14:42:10

Re: [#gelöst] Killall funktioniert in Script nicht

Beitrag von Delld » 29.05.2023 10:58:26

heisenberg hat geschrieben: ↑ zum Beitrag ↑
29.05.2023 03:24:55
Eine Möglichkeit gut Shellprogrammierung zu lernen, ist mit ChatGPT.

Du kannst auch ein Skript einliefern und kannst um Erklärung bitten.

Z. B. :

Code: Alles auswählen

Kannst Du mir das folgende Shellscript erklären?
Hi heisenberger,
danke für die wertvolle Inspiritation, ich werd das umsetzen.

Herzlichen Gruß
Delld
Zuletzt geändert von JTH am 29.05.2023 11:04:11, insgesamt 1-mal geändert.
Grund: [quote] repariert

Delld
Beiträge: 14
Registriert: 09.08.2017 14:42:10

Re: [gelöst] Killall funktioniert in Script nicht

Beitrag von Delld » 29.05.2023 11:03:23

GregorS hat geschrieben: ↑ zum Beitrag ↑
29.05.2023 04:59:42
Delld hat geschrieben: ↑ zum Beitrag ↑
29.05.2023 02:30:56

PS: Guck z.B. da: https://www.debian.org/doc/index.de.html. Da gibt's auch einen „Spickzettel“ zum Ausdrucken.
Hi Gregor,
das ist sehr hilfreich.
Für Diejenigen die ebenfalls sich näher damit befassen möchten hier der Direkt-Link
https://tldp.org/LDP/abs/html/

Auch dir Gregor herzlichen Dank und viele Grüße
Delld
Zuletzt geändert von JTH am 29.05.2023 11:07:33, insgesamt 1-mal geändert.
Grund: Auch hier: [quote] repariert. Den Beitrag vor dem Abschicken einmal in der Vorschau angucken, ist hilfreich ;-)

Antworten