Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

sleep - Prozess für festgesetzte Zeitspanne anhalten

&pagelevel(4)&pagelevel

Definition

#include <unistd.h>

unsigned int sleep(unsigned int seconds);

Beschreibung

sleep() sorgt dafür, dass der aktuelle Prozess solange angehalten wird, bis entweder die durch seconds angegebene Zeit von Echtzeit-Sekunden vergangen ist oder bis ein Signal an den aufrufenden Prozess zugestellt wird, dessen Signalaktion entweder eine Signalbehandlungsfunktion oder die Prozessbeendigung ist. Die Anhaltezeit kann aus Prioritätsgründen des Systems länger als seconds sein.

Wenn während der Ausführung von sleep() das Signal SIGALRM für den aufrufenden Prozess erzeugt und das SIGALRM-Signal ignoriert oder blockiert wird, ist nicht definiert, ob sleep() zurückkehrt, wenn das Signal bearbeitet wird.

Wenn das Signal blockiert ist, ist undefiniert, ob es auch noch nach der Rückkehr von sleep() ansteht oder ob es verworfen wird.

Wenn während der Ausführung von sleep() das Signal SIGALRM für den aufrufenden Prozess erzeugt wird, wenn dieses Signal nicht das Ergebnis eines vorhergehenden Aufrufs der Funktion alarm() ist und wenn das Signal SIGALRM nicht blockiert oder ignoriert wird, ist es undefiniert, ob das Signal noch eine andere Wirkung hat, als sleep() zur Rückkehr zu zwingen.

Wenn eine Signalbehandlungsfunktion sleep() unterbricht, ist das Ergebnis unter folgenden Bedingungen undefiniert:

  • wenn der Zeitpunkt, zu dem ein Signal SIGALRM erzeugt werden soll, ermittelt oder verändert wird

  • wenn die dem Signal SIGALRM zugeordnete Signalaktion verändert wird

  • wenn verändert wird, ob das Signal SIGALRM von der Zustellung blockiert werden soll

Wenn eine Signalbehandlungsfunktion sleep() unterbricht und siglongjmp() oder longjmp() aufruft, um eine Umgebung wiederherzustellen, die vor dem Aufruf von sleep() gesichert wurde, sind sowohl die dem Signal SIGALRM zugeordnete Signalaktion als auch die Zeit, zu der dieses Signal ausgelöst werden soll, undefiniert. Es ist auch nicht definiert, ob das Signal SIGALRM blockiert wird, wenn die Signalmaske des Prozesses als Teil der Umgebung nicht wiederhergestellt wird (siehe auch sigsetjmp()).

Werden Threads verwendet, so wirkt sich die Funktion auf den Prozess oder auf einen Thread wie folgt aus: sleep() bewirkt, dass der aktuelle Thread suspendiert wird, bis eine angegebene Zeit abgelaufen ist oder ein Signal an den Thread zugestellt wurde.

Returnwert

0

wenn sleep() zurückkehrt, weil die eingestellte Zeit abgelaufen ist.

 

seconds minus schlafend verbrachte Zeit in Sekunden

 


wenn die Funktion sleep() zurückkehrt, weil sie durch Zustellung eines Signals vorzeitig beendet wurde.

 

sleep() ist immer erfolgreich.

Hinweise

Obwohl das Programm mit sleep() angehalten wird, läuft die Zeit für eine zuvor gestellte Alarmuhr (mit alarm()) weiter. Dies hat folgende Auswirkungen:

  1. Die vorher eingestellte Alarmzeit sei kleiner als die sleep-Zeit, z.B.:

    alarm(2);

    sleep(30);

    Nach Ablauf von zwei "Schlaf"-Sekunden wird der Alarm ausgelöst und der sleep-Aufruf beendet.

  2. Die vorher eingestellte Alarmzeit sei größer als die sleep-Zeit, z.B.:

    alarm(30);

    sleep(5);

    Die Zeit der Alarmuhr läuft um 5 "schlafende" Sekunden weiter. Die Alarmuhr steht nach dem sleep-Aufruf auf 25.

Die Zeit, die das Programm tatsächlich angehalten wird, kann auch noch aus folgenden Gründen von sec abweichen:

  • sie kann bis zu einer Sekunde kürzer sein, weil das „Aufwecken“ in festen 1-Sekunden-Intervallen stattfindet,

  • sie kann aus Prioritätsgründen beliebig länger sein, weil das System „Wichtigeres“ zu tun hat.

Siehe auch

alarm(), pause(), sigaction(), unistd.h.