Bücher online kostenlos Kostenlos Online Lesen
Die Programmiersprache Ruby (German Edition)

Die Programmiersprache Ruby (German Edition)

Titel: Die Programmiersprache Ruby (German Edition) Kostenlos Bücher Online Lesen
Autoren: David Flanagan , Yukihiro Matsumoto
Vom Netzwerk:
Vom Child lesen
    puts "Child sagte: #{response}"
else
    # Dies ist der Child-Prozess.
    from_parent = gets # Vom Parent lesen
    STDERR.puts "Parent sagte: #{from_parent}"
    puts("Hi Mami!") # An Parent senden
end
end
    Die Funktion
Kernel.exec
ist in Zusammenarbeit mit der Funktion
fork
oder der Methode
open
nützlich. Wir haben weiter oben gesehen, dass Sie die Funktionen
`
und
system
verwenden können, um ein beliebiges Kommando an die Betriebssystem-Shell zu senden. Beide Methoden sind jedoch synchron; sie kehren nicht zurück, bis das Kommando abgeschlossen ist. Wenn Sie ein Betriebssystemkommando als separaten Prozess ausführen möchten, verwenden Sie zuerst
fork
, um einen Child-Prozess zu erzeugen, und rufen Sie dann im Child
exec
auf, um das Kommando auszuführen. Ein Aufruf von
exec
kehrt niemals zurück; er ersetzt den aktuellen Prozess durch einen neuen Prozess. Die Argumente von exec sind dieselben wie diejenigen von system. Wenn es nur eines gibt, wird es als Shell-Befehl behandelt. Wenn es mehrere Argumente gibt, kennzeichnet das erste das aufzurufende Executable, und alle weiteren Argumente werden das »
ARGV
« dieses Executables:
open("|-", "r") do |child|
if child
    # Dies ist der Parent-Prozess.
    files = child.readlines # Ausgabe des Childs einlesen
    child.close
else
    # Dies ist der Child-Prozess.
    exec("/bin/ls", "-l") # Ein anderes Executable ausführen
end
end
    Die Arbeit mit Prozessen ist eine Low-Level-Programmieraufgabe, und die Details gehen über den Umfang dieses Buches hinaus. Wenn Sie mehr wissen möchten, können Sie ri verwenden, um etwas über die anderen Methoden des Moduls
Process
zu lesen.
    10.4.3 Signale abfangen
    Die meisten Betriebssysteme ermöglichen das Senden asynchroner Signale an einen laufenden Prozess. Dies geschieht beispielsweise, wenn der Benutzer Strg-C drückt, um ein Programm abzubrechen. Die meisten Shell-Programme senden als Reaktion auf Strg-C ein Signal namens »
SIGINT
« (für Interrupt). Und die Standardreaktion auf dieses Signal besteht normalerweise darin, das Programm abzubrechen. Ruby ermöglicht es Programmen, Signale »abzufangen« und ihre eigenen Signal-Handler zu definieren. Dies geschieht mithilfe der Methode
Kernel.trap
(oder ihres Synonyms
Signal.trap
), wenn Sie dem User beispielsweise nicht erlauben möchten, Strg-C zum Abbrechen zu verwenden:
trap "SIGINT" {
puts "Ignoriere SIGINT"
}
    Anstatt einen Block an die Methode
trap
zu übergeben, können Sie ihr äquivalent ein
Proc
-Objekt übergeben. Wenn Sie ein Signal einfach stillschweigend ignorieren möchten, können Sie auch den String »
IGNORE
« als zweites Argument übergeben. Übergeben Sie »
DEFAULT
« als zweites Argument, um das Betriebssystemstandardverhalten für ein Signal wiederherzustellen.
    Bei lange laufenden Programmen wie etwa Servern kann es nützlich sein, Signal-Handler zu definieren, die den Server beispielsweise dazu veranlassen, seine Konfigurationsdatei erneut einzulesen, seine Nutzungsstatistiken auszugeben oder in den Debugging-Modus zu wechseln. In Unix-artigen Betriebssystemen werden für solche Zwecke üblicherweise
SIGUSR1
und
SIGUSR2
verwendet.
    10.4.4 Programme beenden
    Es gibt eine Anzahl verwandter
Kernel
-Methoden zum Beenden von Programmen oder zum Ausführen ähnlicher Aktionen. Die Funktion
exit
ist die einfachste. Sie löst eine
SystemExit
-Ausnahme aus, die dafür sorgt, dass das Programm beendet wird, wenn sie nicht abgefangen wird. Bevor beendet wird, werden allerdings
END
-Blöcke und jegliche mit
Kernel.at_exit
registrierte Shutdown-Handler ausgeführt. Für sofortiges Beenden müssen Sie dagegen
exit!
verwenden. Beide Methoden akzeptieren ein Integer-Argument, das den Prozess-Exit-Code angibt, der an das Betriebssystem gemeldet werden soll.
Process.exit
und
Process.exit!
sind Synonyme für diese beiden
Kernel
-Funktionen.
    Die Funktion
abort
gibt die angegebene Fehlermeldung auf dem Standardausgabedatenstrom aus und ruft dann
exit(1)
auf.
    fail
ist einfach ein Synonym für
raise
, und es ist für Fälle gedacht, in denen die ausgelöste Ausnahme das Programm beenden soll. Genau wie
abort
sorgt auch
fail
dafür, dass beim Beenden des Programms eine Meldung angezeigt wird, zum Beispiel
fail "Unbekannte Option #{switch}"
    Die Funktion
warn
ist mit
abort
und
fail
verwandt: Sie schreibt eine Warnmeldung auf die Standardfehlerausgabe (es sei denn, Warnungen wurden mit
-W0
explizit deaktiviert). Beachten Sie jedoch, dass diese Funktion weder eine

Weitere Kostenlose Bücher