So ziemlich das, was der Titel schon sagt:
Mein Shell-Skript sollte
- Führen Sie Befehl A aus und warten Sie, bis er abgeschlossen ist.
- "Bildschirm" ausführen
- Führen Sie den Befehl B1 im Startbildschirm aus
- neues Fenster öffnen (normalerweise über Cmd-ac)
- Führen Sie den Befehl B2 in einem neuen Fenster aus
- neues Fenster öffnen
- Führen Sie den Befehl B3 in einem neuen Fenster aus
Das ist alles, Sie müssen nicht warten, bis einige (oder alle) fertig sind, obwohl das Bonuspunkte bringen würde. Wie könnte ich das machen?
Antwort1
Starten Sie eine Hintergrundsitzung screen
mit dem Namen „mysession“:
screen -d -m -S mysession
top
Im ersten Fenster ausführen
screen -S mysession -X exec top
Starten Sie ein weiteres Fenster, nennen Sie es "win1" und führen Sie darin " vmstat 10
" aus.
screen -S mysession -X screen -t win1
screen -S mysession -p win1 -X exec vmstat 10
Öffnen Sie ein weiteres Fenster, nennen Sie es "win2" und führen Sie darin " iostat 30
" aus.
screen -S mysession -X screen -t win2
screen -S mysession -p win2 -X exec iostat 30
So stellen Sie eine Verbindung her und sehen sich die Sitzung an:
screen -x -S mysession
Wenn eines der Programme beendet wird, wird das Fenster nicht geschlossen, da screen
in jedem eine Shell gestartet wird (die Sie bei Bedarf verwenden können).
- ODER -Wenn Sie nur einen einzigen Befehl pro Fenster möchten oder nach Abschluss der Prozesse einfacher aufräumen möchten, führen Sie nicht die Standardshell in jedem Fenster aus, sondern nur den/die Befehl(e):
screen -d -m -S mysession top
screen -S mysession -p 0 -X title win0 # optional!
screen -S mysession -X screen -t win1 vmstat 10
screen -S mysession -X screen -t win2 iostat 30
screen
wird das Fenster „beenden“ (wobei der Fensterinhalt möglicherweise intakt bleibt, siehe zombie
unten), wenn der Prozess beendet wird, oder um sie herunterzufahren:
screen -S mysession -X quit # nuke whole the session
oder
screen -S mysession -p win2 -X kill
screen -S mysession -p win1 -X kill
screen -S mysession -p 0 -X kill
(dadurch werden laufende Prozesse möglicherweise beendet, screen
es wird jedoch jedem ein SIGHUP gesendet)
Wenn Sie möchten screen
, dass Fenster automatisch geschlossen werden und das Programm beendet wird, wenn alle Prozesse abgeschlossen sind, fügen Sie nach dem Erstellen der Sitzung Folgendes hinzu (falls Sie es zombie
in Ihrem nicht festgelegt haben .screenrc
, ist dies wahrscheinlich ohnehin die Standardeinstellung):
screen -S mysession -X zombie
Dadurch werden die „Zombie“-Schließ- und Wiederbelebungstasten deaktiviert. Fenster verschwinden dann, wenn der Befehl in jedem Fenster beendet wird, und werden selbst geschlossen, wenn das letzte Fenster beendet wird. (Möglicherweise müssen Sie anstelle von screen
verwenden , aber bei mir funktioniert nur Letzteres, trotz gegenteiliger Dokumentation.)defzombie
zombie