it-swarm.com.de

Asynchrone Shellbefehle

Ich kann wirklich nicht glauben, dass ich online keine Lösung dafür finden kann. Ich bin auf ein paar Dinge gestoßen, die ähnlich erscheinen, aber nichts, was wirklich das tut, was ich will ...

Ich versuche, ein Shell-Skript zu verwenden, um einen Befehl zu starten. Es ist mir egal, ob/wann/wie/warum es fertig ist. Ich möchte, dass der Prozess startet und ausgeführt wird, aber ich möchte sofort zu meiner Shell zurückkehren können ...

Hoffe das ist klar genug, ich vermisse wahrscheinlich nur etwas unglaublich Dummes

69
LorenVS

Sie können das Skript einfach im Hintergrund ausführen:

$ myscript &

Beachten Sie, dass dies anders ist als das Einfügen von & in Ihr Skript, das wahrscheinlich nicht das tut, was Sie wollen.

86
Carl Norum
Nohup cmd

hängt nicht, wenn Sie das Terminal schließen. Die Standardausgabe geht an Nohup.out

Sie können dies mit Backgrounding kombinieren, 

Nohup cmd &

und die Ausgabe loswerden, 

Nohup cmd > /dev/null 2>&1 &

sie können auch einen Befehl disown eingeben. Typ cmd, Ctrl-Z, bg, disown 

32
Steve B.

Jeder hat nur disown vergessen. Also hier eine Zusammenfassung:

  • & stellt den Job in den Hintergrund.

    • Macht es beim Versuch, die Eingabe zu lesen, blockiert, und
    • Lässt die Shell nicht auf ihren Abschluss warten.
  • disown entfernt den Prozess aus der Jobsteuerung der Shell, lässt ihn jedoch weiterhin mit dem Terminal verbunden.

    • Eines der Ergebnisse ist, dass die Shell keine SIGHUP sendet. (Wenn die Shell eine SIGHUP empfängt, sendet sie auch eine SIGHUP an den Prozess, wodurch der Prozess normalerweise beendet wird).
    • Natürlich kann es nur auf Hintergrundjobs angewendet werden (weil Sie es nicht eingeben können, wenn ein Vordergrundjob ausgeführt wird).
  • Nohup trennt den Prozess vom Terminal, leitet seine Ausgabe an Nohup.out um und schirmt ihn gegen SIGHUP ab.

    • Der Prozess erhält keine gesendete SIGHUP.
    • Es ist völlig unabhängig von der Jobkontrolle und könnte prinzipiell auch für Vordergrundjobs verwendet werden (obwohl dies nicht sehr nützlich ist).
    • Wird normalerweise mit & (als Hintergrundjob) verwendet.
30
Ani Menon

Alternativ können Sie nach dem Ausführen des Programms Strg-Z drücken, wodurch das Programm angehalten und anschließend eingegeben wird 

bg

dadurch wird Ihr zuletzt angehaltenes Programm in den Hintergrund gestellt. (Nützlich, wenn Sie etwas ohne '&' gestartet haben und es trotzdem in der Backgroung haben möchten, ohne es neu zu starten.)

24
pajton

screen -m -d $command$ startet den Befehl in einer getrennten Sitzung. Sie können screen -r verwenden, um eine Verbindung zur gestarteten Sitzung herzustellen. Es ist ein wunderbares Werkzeug, das auch für Remote-Sitzungen äußerst nützlich ist. Lesen Sie mehr unter man screen

0
mluthra