Programmierung in Ruby

Der Leitfaden der Pragmatischen Programmierer

module Process

Index:

egid egid= euid euid= exit! fork getpgid getpgrp getpriority gid gid= kill pid ppid setpgid setpgrp setpriority setsid uid uid= wait wait2 waitpid waitpid2


Das Modul Process ist eine Sammlung von Methoden, mit denen Prozesse manipuliert werden können.

Konstanten

PRIO_PGRP 1 Prozess-Guppen-Priorität.
PRIO_PROCESS 0 Prozess-Priorität.
PRIO_USER 2 Benutzer-Priorität.
WNOHANG 1 Nicht blockieren, falls kein Kindprozess beendet wurde. Gibt es nicht auf allen Plattformen.
WUNTRACED 2 Liefere ebenso gestoppte Kindprozesse zurück. Gibt es nicht auf allen Plattformen.

class methods
egid Process.egid -> aFixnum

Liefert die effektive Group-Id für diesen Prozess.

Process.egid » 500

egid= Process.egid= aFixnum-> aFixnum

Setzt die effektive Group-Id für diesen Prozess.

euid Process.euid -> aFixnum

Liefert die effektive User-Id für diesen Prozess.

Process.euid » 501

euid= Process.euid= aFixnum

Setzt die effektive User-Id für diesen Prozess. Gibt es nicht auf allen Plattformen.

exit! Process.exit!( aFixnum=-1 )

Beendet den Prozess sofort. Es werden keine Exit-Handlers zurückgegeben. aFixnum wird als Exit-Status an das darunter liegende System zurück

Process.exit!(0)

fork Process.fork [{ block }]-> aFixnum or nil

Siehe Kernel::fork auf Seite 420.

getpgid Process.getpgid( anInteger ) -> anInteger

Liefert die Prozess-Group-Id für den angegebenen Prozess. Gibt es nicht auf allen Plattformen.

Process.getpgid(Process.ppid()) » 13790

getpgrp Process.getpgrp -> anInteger

Liefert die Prozess-Group_Id für diesen Prozess. Gibt es nicht auf allen Plattformen.

Process.getpgid(0) » 13790
Process.getpgrp » 13790

getpriority Process.getpriority( aKind, anInteger ) -> aFixnum

Liefert die Priorität der Prozess-Steuerung für den angegebenen Prozess, die Prozess-Group oder den Benutzer. aKind gibt die Art des zu untersuchenden Teils an: entweder Process::PRIO_PGRP, Process::PRIO_USER oder Process::PRIO_PROCESS. anInteger ist eine Id für den speziellen Prozess, die Prozess-Group oder den Benutzer (eine Id von 0 bedeutet den aktuellen). Kleine Prioritäten sind bei der Prozess-Steuerung die besseren. Gibt es nicht auf allen Plattformen.

Process.getpriority(Process::PRIO_USER, 0) » 0
Process.getpriority(Process::PRIO_PROCESS, 0) » 19

gid Process.gid -> aFixnum

Liefert die Group-Id für diesen Prozess.

Process.gid » 500

gid= Process.gid= aFixnum-> aFixnum

Setzt die Group-Id für diesen Prozess.

kill Process.kill( aSignal, [aPid]+ ) -> aFixnum

Sendet das angegebene Signal an die angegebene(n) Prozess-Id(s), oder an den aktuellen Prozess, falls aPid Null ist. aSignal kann eine Integer-Signal-Nummer oder ein POSIX-Signal-Name (mit oder ohne dem SIG-Präfix) sein. Falls aSignal negativ ist (oder mit einem ``-''-Zeichen anfängt), wird die Prozess-Group statt des Prozesses gekillt. Nicht alle Signale gibt es auf allen Plattformen.

trap("SIGHUP") { close_then_exit }
Process.kill("SIGHUP", 0)

pid Process.pid -> aFixnum

Liefert die Prozess-Id dieses Prozesses. Gibt es nicht auf allen Plattformen.

Process.pid » 16488

ppid Process.ppid -> aFixnum

Liefert die Prozess-Id des Elternteils dieses Prozesses. Bei NT immer 0. Gibt es nicht auf allen Plattformen.

print "I am ", Process.pid, "\n"
Process.fork { print "Dad is ", Process.ppid, "\n" }
erzeugt:
I am 16490
Dad is 16490

setpgid Process.setpgid( aPid, anInteger ) -> 0

Setzt die Prozess-Group-Id von aPid (0 bedeutet dieser Prozess) auf anInteger. Gibt es nicht auf allen Plattformen.

setpgrp Process.setpgrp -> 0

Äquivalent zu setpgid(0,0). Gibt es nicht auf allen Plattformen.

setpriority Process.setpriority( kind, anInteger, anIntPriority ) -> 0

Siehe Process#getpriority.

Process.setpriority(Process::PRIO_USER, 0, 19) » 0
Process.setpriority(Process::PRIO_PROCESS, 0, 19) » 0
Process.getpriority(Process::PRIO_USER, 0) » 19
Process.getpriority(Process::PRIO_PROCESS, 0) » 19

setsid Process.setsid -> aFixnum

Führt diesen Prozess ein als neue Session und Leiter der Prozess-Group, ohne kontrollierendes tty. Liefert die Session-Id zurück. Gibt es nicht auf allen Plattformen.

Process.setsid » 16495

uid Process.uid -> aFixnum

Liefert die Benutzer-Id dieses Prozesses.

Process.uid » 501

uid= Process.uid= anInteger-> aNumeric

Setzt die (Integer-) Benutzer-Id dieses Prozesses. Gibt es nicht auf allen Plattformen.

wait Process.wait -> aFixnum

Wartet auf das Beenden eines Kind-Prozesses und liefert dessen Prozess-Id. Löst einen SystemError aus, falls es keine Kind-Porzesse gibt. Gibt es nicht auf allen Plattformen.

Process.fork { exit 1; } » 16500
Process.wait » 16500

wait2 Process.wait2 -> anArray

Wartet auf das Beenden eines Kind-Prozesses und liefert ein Array mit dessen Prozess-Id und dessen Exit-Status. Löst einen SystemError aus, falls es keine Kind-Prozesse gibt.

Process.fork { exit 1 } » 16503
Process.wait2 » [16503, 256]

waitpid Process.waitpid( aPid, anInteger=0 ) -> aPid

Wartet auf das Beenden des angegebenen Kind-Prozesses. anInteger kann dabei das logische Oder der Flag-Werte Process::WNOHANG (nicht blockieren, falls kein Kind-Prozess vorhanden) oder Process::WUNTRACED (liefere gestoppte Kind-Prozesse zurück, die nicht gemeldet wurden) sein. Nicht alle Flags gibt es auf allen Plattformen, aber ein Flag-Wert von Null funktioniert überall.

include Process
pid = fork { sleep 3 } » 16506
Time.now » Sun Mar 04 23:31:14 CST 2001
waitpid(pid, Process::WNOHANG) » nil
Time.now » Sun Mar 04 23:31:14 CST 2001
waitpid(pid, 0) » 16506
Time.now » Sun Mar 04 23:31:17 CST 2001

waitpid2 Process.waitpid2( aPid, anInteger=0 ) -> anArray

Wartet auf das Beenden des angegebenen Kind-Prozesses, liefert dessen Prozess-Id und dessen Exit-Status zurück. anInteger kann das logische Oder der Flag-Werte Process::WNOHANG (nicht blockieren, falls kein Kind-Prozess vorhanden) oder Process::WUNTRACED (liefere gestoppte Kind-Prozesse zurück, die nicht gemeldet wurden) sein. Nicht alle Flags gibt es auf allen Plattformen, aber ein Flag-Wert von Null funktioniert überall.


Extracted from the book "Programming Ruby - The Pragmatic Programmer's Guide"
Übersetzung: Jürgen Katins
Für das englische Original:
© 2000 Addison Wesley Longman, Inc. Released under the terms of the Open Publication License V1.0. That reference is available for download.
Diese Lizenz sowie das Original vom Herbst 2001 bilden die Grundlage der Übersetzung
Es wird darauf hingewiesen, dass sich die Lizenz des englischen Originals inzwischen geändert hat.
Für die deutsche Übersetzung:
© 2002 Jürgen Katins
Der Copyright-Eigner stellt folgende Lizenzen zur Verfügung:
Nicht-freie Lizenz:
This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, v1.0 or later (the latest version is presently available at http://www.opencontent.org/openpub/). Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder. Distribution of the work or derivative of the work in any standard (paper) book form is prohibited unless prior permission is obtained from the copyright holder.
Freie Lizenz:
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".