Ich habe gerade eine Frage gestellt, wie man einen Prozess dazu bringt, im Hintergrund zu schlafen.
Die Notation, die ich mir ausgedacht habe, sieht folgendermaßen aus:
sleep 10 && echo "hello world" &
Diese Antwort auf eine andere Frage verwendet ein anderes Format.
( sleep 10 ; echo "hello world" ) &
Ich weiß, &&
dass der zweite Prozess nur gestartet werden kann, wenn der erste true zurückgibt. Kann der Schlaf versagen? Gibt es eine Situation, in der ich eine der anderen vorziehen sollte?
shell
background-process
sleep
Baarn
quelle
quelle
Antworten:
Der Ruhezustand kann fehlschlagen, wenn er während der Ausführung beendet wird:
Da sleep eine externe ausführbare Datei ist, ist es auch denkbar, dass die Fork- oder Exec-Aufrufe fehlschlagen, was auch dazu führen würde, dass bash einen Fehlercode> 0 generiert.
quelle
a; b
führt immer den zweiten Befehl nach dem ersten aus, währenda && b
der zweite Befehl nur ausgeführt wird, wenn der erste erfolgreich ist, dh nur, wenn der erste Befehl den Status 0 zurückgibt.sleep
Gibt immer den Status 0 zurück, außer wenn er durch ein Signal beendet wird. In diesem Fall lautet der Status 128 + Signalnummer. (Der Status kann auch 126 oder 127 sein, wenn dersleep
Befehl nicht vorhanden ist oder das Programm aufgrund fehlender Ressourcen nicht gestartet werden kann. Es ist jedoch sehr unwahrscheinlich, dass diese Fälle auftreten.)Daher sollten Sie verwenden
;
oder&&
abhängig davon, was passieren soll, wenn der Schlaf unterbrochen wird:sleep 10; echo hello
druckt die Nachricht nach 10 Sekunden (weniger, wenn siesleep
durch ein Signal getötet wird);sleep 10 && echo hello
druckt die Nachricht nach 10 Sekunden, druckt jedoch nichts, wenn siesleep
durch ein Signal beendet wird.quelle
Sie sollten davon ausgehen, dass ein Befehl aus verschiedenen Gründen fehlschlagen kann, auch wenn ein Ausfall des Schlafes in der Tat sehr unwahrscheinlich ist.
bedeutet Hintergrundschlaf und Echo nach dem Ruhezustand ausführen, aber wenn der Schlaf fehlschlägt, wird das Echo trotzdem ausgeführt, siehe vollständige Erklärung
bedeutet, dass Sie das Ende des Ruhezustands abwarten müssen, bevor Sie etwas wiederholen. Wenn das Echo fehlschlägt, wird der Prozess gestoppt, aber der gesamte Befehl wird ebenfalls im Hintergrund ausgeführt. siehe vollständige Erklärung
Fazit
Die erste Syntax ist ein Shell-Skript, was bedeutet, dass Anweisungen separat als Liste betrachtet werden.
Die zweite Option verwendet && bedeutet UND. Wenn Sie sie verwenden, wenn der erste Befehl fehlschlägt, wird der zweite nicht ausgeführt.
Dies ist nur ein anderes Verhalten bei der Behandlung von Fehlern.
quelle