Führen Sie mehrere GUI-Programme vom Terminal aus, ohne sie zu verleugnen

7

Ich habe ein sehr einfaches (aber für mich nützliches) Bash-Skript erstellt. Es werden lediglich einige Anwendungen geöffnet, die ich manuell geöffnet habe. Hier ist der Code:

#!/bin/bash
netbeans &
mysql-workbench &
opera &
chromium-browser &

Wenn ich jetzt das Terminal schließe, werden die vom Skript geöffneten Anwendungen weiter ausgeführt. Was normal ist, dafür ist das "&" da.

Meine Frage ist: Gibt es eine Möglichkeit, diese Anwendungen weiterhin automatisch auszuführen, aber auch automatisch zu schließen? Wenn sie noch an das Terminal angeschlossen wären, würden sie geschlossen, aber wenn ich das kaufmännische Und entferne, wird nur die erste Anwendung ausgeführt.

Vielen Dank

Karim Mtl
quelle
killall <app-name> ist das, was du meinst, um sie automatisch zu töten? automatisch töten wann? zu einer bestimmten Zeit? Wenn eine Argumentation wahr ist, wie eine CPU-Auslastung, die größer als X% ist? Geben Sie an, wann Sie sie automatisch beenden und eine Schleife mit dem Befehl "while" oder "if" erstellen möchten. Vergessen Sie nicht, einen Sleep-Timer hinzuzufügen, damit die CPU ein wenig ruht und sich nicht wie verrückt rund um die Uhr wiederholt.
Pavlos Theodorou
@PavlosTheodorou Ich denke, sie möchten das Terminal schließen, um auch die mehreren darin gestarteten Anwendungen zu schließen.
Chai T. Rex
@Chai T.Rex, das Schließen des Terminals tötet sie alle. Ich glaube nicht, dass er das so meint. Vielleicht bedeutet er, die App mit nohup zu trennen, zum Beispiel: $ nohup Firefox, entweder disown verwenden, zum Beispiel: $ Firefox &; verleugnen. Und schließen Sie dann die Apps separat. Oder er möchte den Befehl killall <Anwendungsname> verwenden. Wir warten von Karim, um zu erklären, was er bedeutet, um die Apps automatisch zu schließen.
Pavlos Theodorou
1
@PavlosTheodorou mit &nach einem GUI-Programm wird das GUI-Programm gestartet, aber das Schließen des Terminals wird das GUI-Programm nicht schließen.
Chai T. Rex
"Wenn ich jetzt das Terminal schließe, werden die vom Skript geöffneten Anwendungen weiter ausgeführt. Das ist normal, dafür ist das" & "da." - Nein, dafür ist es nicht &. Die Verwendung &hat keinen Einfluss darauf, ob die Anwendungen beim Schließen des Terminals beendet werden oder nicht. Durch das Schließen des Terminals erhält die Anwendung SIGHUP. Wenn die Anwendung nicht beendet wird, liegt dies daran, dass dieses Signal absichtlich ignoriert wird. Nicht weil du es benutzt hast &.
Marcelm

Antworten:

5

Diese beiden Funktionen können aus Ihrer .bashrcDatei verwendet werden, um sie zu starten und zu schließen. Rufen Sie sie einfach mit lappund auf kapp:

lapp(){
     netbeans &
     mysql-workbench &
     opera &
     chromium-browser &
}

kapp() {
    pkill 'netbeans|mysql-workbench|opera|chromium-browser'
}

#Or

kapp() {
    killall 'netbeans|mysql-workbench|opera|chromium-browser'
}

Information:

  • Denken Sie daran, source .bashrcnach dem Hinzufügen dieser Funktionen auszuführen

(Quelle: man pkill)

George Udosen
quelle
Es tut mir leid, dass ich das gefragt habe, aber ich habe zum ersten Mal gelesen, wie man Befehle zu .bashrc hinzufügt. Auf diese Weise werden die Apps geöffnet, ohne das Terminal zu besitzen, oder? also sind die verleugnung oder nohup nicht notwendig? wir laufen lapp, schließen terminal wenn wir wollen und laufen dann kapp und schließen sie?
Pavlos Theodorou
nvm Ich habe nie versucht, Apps vom Terminal aus zu öffnen, also ... keine Frage von mir. bereits in Kommentaren beantwortet. Öffnen mit & es besitzt nicht das Terminal.
Pavlos Theodorou
Ich mag das nicht, weil andere Instanzen dieser Anwendungen ebenfalls getötet würden. Zwar handelt es sich bei einigen dieser Anwendungen möglicherweise um Einzelinstanzanwendungen, aber Sie möchten nicht, dass eine Instanz, die Sie vor dem Öffnen Ihres Terminals geöffnet hatten, beendet wird.
Muzer
@ Muzer, das OP sagte, er möchte schließen, was er geöffnet hat. Von welcher anderen Instanz sprechen Sie?
George Udosen
@Gergoe Nehmen wir an, OP hat bereits eine Instanz von Netbeans ausgeführt. Wenn sie dann ihr Terminal öffneten, wurde eine zweite Instanz geöffnet. Wenn sie später ihr Terminal schlossen, wurden beide Kopien von Netbeans geschlossen!
Muzer
5

Sie müssen das Skript als Quelle verwenden, damit diese Befehle in Ihrer aktuellen Shell ausgeführt werden, anstatt in der abgespaltenen Shell, die für das Skript gestartet wurde:

. ./foo.sh

Diese Hintergrundprozesse sind dann Teil der Jobsteuerung Ihrer Shell.

Es ist möglicherweise einfacher, eine Funktion zu verwenden. Fügen Sie in Ihrem Bashrc beispielsweise Folgendes hinzu:

foo () {
    netbeans &
    mysql-workbench &
    opera &
    chromium-browser &
}

Wenn Sie dann foovon bash ausgeführt werden, werden die Befehle in Ihrer aktuellen Shell ausgeführt.

muru
quelle
Oh, schön, ich wusste nicht, dass ich das kann. Löschen Sie diese Zeilen nicht, wenn Sie die Antwort später bearbeiten (wenn Sie sie bearbeiten), um sie auch an das automatische Schließen anzupassen.
Pavlos Theodorou