• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Verständnisfrage zu Autostart mit Bash

HPF-84E

Member
Hallo,

eine kleine Frage hätte ich mal zu dem Autostart und der Bash.

Erklärung: Ich benutze Terminator als Multiplexer. Dort lasse ich Programme automatisch starten mit der Integrierten Funktion mit z.B.
Code:
screenfetch;bash
man könnte auch fsh oder zsh nehmen oder was auch immer man für eine Shell man nimmt.

Diesen Terminator packe ich in den Autostart mit folgenden Befehl:
Code:
sh -c "terminator & disown ; sleep 2 ; wmctrl -r jag@jag:~ -t 3 ;exit"
Ich lasse Ihn mit Hilfe der Bash starten, warte 2 Sekunden und lasse das Fenster auf die Arbeitsfläche 4 verschieben.

Frage(n):
  • [1]Auf welcher Ebene arbeitet dort die Shell und kann ich dort
    Code:
    jobs
    abfragen?
  • [2]Den Befehl von der Shell abzutrennen ist Sinnvoll aber brauche ich unbedingt ein [code)exit[/code] um die Instanz zu schliessen.
  • [3]Mir geht es auch um die Systembelastung. Ich weiß das die Shell viele Prozesse gleichzeitig abarbeiten kann und muss.

Ich hoffe ich habe mich halbwegs verständlich Ausgedrückt. Danke für Interesse.

Nachtrag: Wenn ich nicht den Prozess vom Terminal abtrennen würde und nicht mit exit beenden würde wo könnte ich den Prozess mit
Code:
Jobs
nachfragen/überprüfen?
 
A

Anonymous

Gast
die Shell startet hier nur terminator, macht anschließend 2 Sekunden Pause, und anschließend, führt sie wmctrl aus (was immer dieses macht) und sobald das fertig ist, beendet sich die Shell, ob dort ein exit steht oder nicht.
terminator läuft weiter, der Prozess ist beim Starten mit disown von dieser Shell getrennt worden.
Ich bin mir jetzt nicht ganz sicher was disown hier in diesem Fall anders macht als nohub, aber in irgend einer Prozessliste (außer der von systemd an die du im Nomalfall nicht rankommst) wirst du den terminator Prozess nicht mehr wiederfinden wenn die Shell sich beendet hat, und der Shellprozess ist schon nach Beendigung von wmctl weg
Um die Systembelastung des Shell Prozesses musst du dir hier überhaupt keine Gedanken machen, ehr um alles andere

was willst du hier "nachfragen" oder "überprüfen" ? , du kanns sehen ob der läuft zB mit ps, pstree, top ..... und entsperchenden Optionen.

robi
 
OP
H

HPF-84E

Member
Hi,

was ich in Beziehung
Code:
&
(in den Backround legen) und
Code:
disown
(abkoppeln) gelesen
hatte waren immer Beispiele mit ssh-Verbindungen. Das hatte mich wohl verwirrt.
Für mich als normaler User ist das wohl uninteressant.

Ein
Code:
exit
zum Schluss ist ja ein SIGTERM welches ich ja nicht manuell ausführen
kann ohne es in die Befehlszeile einzugeben.

Wenn ich also kein
Code:
exit
oder
Code:
sigterm
mit einbaue wartet der Prozess/Shell auf weitere Eingaben
bis ich mich abmelde (Ausnahme ssh) oder den PC herunterfahre. Deshalb frage ich mich ob
an dieser Stelle also ohne SIGTERM die Shell wirklich beendet wird?

Wie gesagt ist das für viele Uninteressant da die Shell hunderte von Prozesse gleichzeitig bearbeitet.
Es kam bei mir nur die Frage auf ob das ohne ein exit ein wirklich sauberes arbeiten ist.

Sorry, wenn ich mit sowas geringfügigen Nerve. :D
 
A

Anonymous

Gast
HPF-84E schrieb:
Wenn ich also kein
Code:
exit
oder
Code:
sigterm
mit einbaue wartet der Prozess/Shell auf weitere Eingaben
bis ich mich abmelde (Ausnahme ssh) oder den PC herunterfahre. Deshalb frage ich mich ob
an dieser Stelle also ohne SIGTERM die Shell wirklich beendet wird?
HIer liegst du komplett falsch, du hast hier die Shell ohne "-i" gestartet und damit nicht interaktiv gestartet, so das sie auf Eingaben wartet oder bis sie irgenwie beendet wird.
und hast ihr mit "-c" einen String gegeben den sie als Kommandos abarbeiten soll. Wenn sie damit fertig ist, beendet sich sich automatisch, wenn sie nicht noch auf irgend etwas aus dieser Kommandosabarbeitung warten muss. Das exit dort am Ende dieser Befehlskette ist also nicht notwenig zu Beenden. Es darf dort stehen, du kannst damit auch gerne einen definierten Returnwert zurückgeben aber es ist in deinem Fall unnötig, da die Shell sich in deinem Fall nach Beendigung des wmctrl sowieso beendet, dort ist Ende der Befehlereihenfolge die du zum ausführen mitgegeben hast.
Damit stirbt der Vaterprozess des terminator-Prozesses, da er jedoch aus der Prozesslist der Bash mittels disown entfernt wurde, läuft er weiter und bekommt die ID 1 (systemd) als Vaterprozess zugeordenet, weil Vaterlose Porzesse gibt es nicht, (abgesehen vom Urprozess der vom Kernel beim Kernelstart erzeugt wird)

HPF-84E schrieb:
Wie gesagt ist das für viele Uninteressant da die Shell hunderte von Prozesse gleichzeitig bearbeitet.
Es kam bei mir nur die Frage auf ob das ohne ein exit ein wirklich sauberes arbeiten ist.
Was immer deine Vorstellung von der Shell ist, auch hier liegst du irgendwie falsch, "Die Shell" so wie du sie beschreibst gibt es nicht. es gibt wohl ständig hunderte von Shellprozessen die in Linux zu jeder Zeit vorhanden sind, oftmals jedoch nur im Hintergrund schafend und auf irgende was wartent, oder aber zB bei der Scriptarbeitung die alle ihrerseits innerhalb kürzesester Zeit wieder hunderte Shell-Supprozesse und andere Prozesse starten und oftmal ebensoschnell wieder verschwunden sind wie sie gekommen sind. Die Shell arbeitet auf alles Fälle keine Prozesse ab, sondern Shellkomandos, was auch das Starten von anderen Prozessen/Tool/Applikationen/... beinhaltet und einschließt. Und Gleichzeitig? ....aber lassen wir das. entweder sich nicht so viele Gedanken über die Hintergründe machen, oder vielleicht nochmal in den Unix-Linux-Grundlagen reinlesen, es scheint ein bischen, als kommen deine Vorstellungen und Erfahrungen aus einer anderen Betriebssystem Welt.

robi
 
OP
H

HPF-84E

Member
Hallo,
ich habe hier nur ein „Linux Essentials" Buch zu liegen welches alles nur Grundsätzlich,
kurz und knapp erklärt ohne weiterführende Hilfe. Daher meine Frage.

robi schrieb:
du hast hier die Shell ohne "-i" gestartet und damit nicht interaktiv gestartet, so das sie auf Eingaben wartet oder bis sie irgenwie beendet wird.
und hast ihr mit "-c" einen String gegeben den sie als Kommandos abarbeiten soll. Wenn sie damit fertig ist, beendet sich sich automatisch, wenn sie nicht noch auf irgend etwas aus dieser Kommandosabarbeitung warten muss.

Damit hast du mich in die richtige Richtung geschubst. Ich hatte irgendwie im Kopf das halt alles
mit einen Exit beendet werden muss. So wie man es beim Skripting auch macht um es halt zu beenden
(Wenn alles fertig dann auch Ende).

Ich glaube ich muss mir doch mal ein gedrucktes Nachschlagewerk kaufen. Bei Suchen im I-net
landet man auch oft auf nicht zielführenden Beiträgen. Ich glaube Links zu Printmedien sind oft genug erwähnt.

Danke Dir für deine Mühe.
 
Oben