Zschimmer GmbH Impressum und Kontakt

Scheduler     Erste Seite

  XML     API     Register


logo

Subprocess - Programmschnittstelle (API)

JavaJavaScriptVBScriptPerl Javadoc
   

Subprocess

 

$subprocess->close() Gibt die System-Ressourcen frei
 
Variable_set   $subprocess->env Umgebungsvariablen als Variable_set
 
$subprocess->LetProperty( 'environment', name, value ) Umgebungsvariablen
 
int   $subprocess->exit_code
 
$subprocess->LetProperty( 'ignore_error', Boolean ) Verhindert, dass bei exit_code != 0 der Job stoppt
Boolean   $subprocess->ignore_error
 
$subprocess->LetProperty( 'ignore_signal', int ) Verhindert, dass bei einem Abbruch des Prozesses mit Signal der Job stoppt
int   $subprocess->ignore_signal
 
$subprocess->kill( signal ) Bricht den Subprozess ab
 
$subprocess->LetProperty( 'own_process_group', Boolean ) Subprozess als Prozessgruppe
Boolean   $subprocess->own_process_group
 
int   $subprocess->pid Prozesskennung
 
$subprocess->LetProperty( 'priority', int ) Prozess-Priorität
int   $subprocess->priority
 
$subprocess->LetProperty( 'priority_class', String ) Prioritätsklasse
String   $subprocess->priority_class
 
$subprocess->start( command_line ) Startet den Prozess
 
Boolean   $subprocess->terminated
 
int   $subprocess->termination_signal Signal, mit dem sich der Prozess beendet hat (nur Unix)
 
$subprocess->LetProperty( 'timeout', seconds ) Frist für den Subprozess
 
$subprocess->wait_for_termination()
Boolean   $subprocess->wait_for_termination( seconds )

Beispiel  my_system() - Einfache Ausführung eines Kommandos

sub my_system
{
    # Executes the command without processing of shell characters
    
    my $cmd     = shift;
    my $timeout = shift;
    
    my $subprocess = $spooler_task->create_subprocess();
    
    $subprocess->LetProperty( "timeout", $timeout )  if defined $timeout;
    $subprocess->start( $cmd );
    $subprocess->wait_for_termination();            
    return $subprocess->exit_code;
}


sub shell
{
    # Executes the command under the shell (Unix only)
        
    my $cmd     = shift;
    my $timeout = shift;
    my $subprocess = $spooler_task->create_subprocess();
    
    $subprocess->LetProperty( "timeout", $timeout )  if defined $timeout;
    $subprocess->start( [ "/bin/sh", "-c", $cmd ] );
    $subprocess->wait_for_termination();            
    return $subprocess->exit_code;
}

 

Ein Subprozess ist irgendein Prozess, der mit Task.create_subprocess() oder Subprocess.start() gestartet werden kann.

 

close

Gibt die System-Ressourcen frei

 

$subprocess->close()

 

Sollte in Sprachen mit Garbage Collector (Java, JavaScript) gerufen werden, außer die Task beendet sich sofort.

Der Subprocess ist danach unbrauchbar.

env

Umgebungsvariablen als Variable_set

 

Variable_set   $subprocess->env

Beispiel  in javascript

var subprocess = spooler_task.create_subprocess();
subprocess.start( subprocess.env.substitute( "${MY_HOME}/my_program" ) );
subprocess.wait_for_termination();

 

Liefert ein Variable_set der Umgebungsvariablen.

Anfänglich ist die Umgebung mit den Umgebungsvariablen des startenden Prozesses gefüllt. Umgebungsvariablen können entfernt werden, indem sie auf "" gesetzt werden. Der Aufruf Subprocess.start() übergibt die Umgebungsvariablen dem Subprozess.

Unter Unix werden groß und klein geschriebene Umgebungsvariablen unterschieden.

Nach dem Start des Subprozesses haben Änderungen an den Umgebungsvariablen keine Wirkung. Auch können vom Prozess geänderte Umgebungsvariablen nicht gelesen werden.

Das Objekt lässt sich nicht anderen Objekten übergeben (denn es befindet sich im Prozess der Task, während die meisten anderen Objekte sich im Prozess des Schedulers befinden).

Rückgabe

Variable_set  

environment

Umgebungsvariablen

 

$subprocess->LetProperty( 'environment', String name, String value )

Beispiel  in javascript

// The following two statements have the same effect
subprocess.environment( "my_variable" ) = "my_value"
subprocess.env.value( "my_variable" ) = "my_value"

 

Die hier gesetzten Variablen werden zusammen mit den übrigen Umgebungsvariablen des laufenden Prozesses dem neuen Subprozess übergeben.

Unter Unix werden groß und klein geschriebene Umgebungsvariablen unterschieden.

Siehe auch Subprocess.env.

Parameter

name
value

exit_code

 

int   $subprocess->exit_code

 

Erst aufrufen, wenn Subprocess.terminated == true.

ignore_error

Verhindert, dass bei exit_code != 0 der Job stoppt

 

$subprocess->LetProperty( 'ignore_error', Boolean )
Boolean   $subprocess->ignore_error

 

Verhindert, dass der Job stoppt, wenn der Subprozess bei Task-Ende mit Subprocess.exit_code != 0 geendet hat.

Wenn das Ende des Subprocesses nicht mit Subprocess.wait_for_termination abgewartet worden ist, tut das der Scheduler bei Task-Ende. Wenn dann der Subprocess mit Subprocess.exit_code != 0 endet, stoppt der Job mit Fehler.

Mit ignore_error kann das verhindert werden.

Parameter

Boolean

ignore_signal

Verhindert, dass bei einem Abbruch des Prozesses mit Signal der Job stoppt

 

$subprocess->LetProperty( 'ignore_signal', int )
int   $subprocess->ignore_signal

 

Wirkt nicht unter Windows, weil es hier keine Signale gibt.

Parameter

int

kill

Bricht den Subprozess ab

 

$subprocess->kill( int signal  (optional) )

Parameter

signal  (optional)

Nur unter Unix: Das Signal für kill(). 0 wird als 9 (SIGKILL, sofortiges Ende) interpretiert.

own_process_group

Subprozess als Prozessgruppe

 

$subprocess->LetProperty( 'own_process_group', Boolean )
Boolean   $subprocess->own_process_group

 

Nur unter Unix.

Der Default kann mit factory.ini (Abschnitt [spooler], Eintrag subprocess.own_process_group=…) eingestellt werden.

own_process_group lässt den Subprozess in einer eigenen Prozessgruppe starten, indem der Systemaufruf setpgid(0,0) ausgeführt wird. Wenn der Scheduler den Subprozess abbricht, bricht er die ganze Prozessgruppe ab.

Parameter

Boolean

pid

Prozesskennung

 

int   $subprocess->pid

priority

Prozess-Priorität

 

$subprocess->LetProperty( 'priority', int )
int   $subprocess->priority

Beispiel  in javascript

subprocess.priority = +5;    // Unix: Priorität etwas verschlechtern

 

Unix: Die höchste Priorität ist -20, die niedrigste 20. Üblicherweise kann die Priorität nur gesenkt, nicht erhöht werden.

Windows kennt die Prioritätsklassen 4 "idle", 6 "below_normal", 8 "normal", 10 "above_normal" und 13 "high" (andere Werte werden abgerundet). Siehe auch Task.priority_class.

Wenn die Priorität nicht gesetzt werden kann, führt das nicht zu einem Fehler.

Ein Prozess mit hoher Priorität kann Ihren Rechner blockieren.

Die Priorität kann betriebsystem-unabhängig eingestellt werden mit Subprocess.priority_class. Siehe auch Task.priority.

Parameter

int

priority_class

Prioritätsklasse

 

$subprocess->LetProperty( 'priority_class', String )
String   $subprocess->priority_class

Beispiel  in javascript

subprocess.priority_class = "below_normal";

 

Gesetzt werden können folgende Prioritätsklassen, die verschiedenen Prioritäten unter Windows und Unix entsprechen:

Prioritätsklasse Windows Unix
"idle" 4 16
"below_normal" 6 6
"normal" 8 0
"above_normal" 10 -6
"high" 13 -16

Wenn die Priorität nicht gesetzt werden kann, z.B. wegen mangelndem Recht, führt das nicht zu einem Fehler. Dagegen führt das Setzen einer nicht hier aufgeführten Prioritätsklasse zu einem Fehler.

Ein Prozess mit hoher Priorität kann Ihren Rechner blockieren.

Siehe auch Subprocess.priority, Task.priority_class und Microsoft® Windows® Scheduling Priorities.

Parameter

String

start

Startet den Prozess

 

$subprocess->start( String|String[] command_line )

 

Windows erkennt sofort, wenn das Programm nicht ausführbar ist. Die Methode liefert dann einen Fehler.

Unter Unix wird stattdessen Subprocess.exit_code auf 99 gesetzt. Vorher muss das Ende des Prozesses abgewartet werden mit Subprocess.wait_for_termination().

Shell-Operatoren wie |, && und > werden nicht interpretiert. Verwenden Sie dazu die Programme /bin/sh bzw. c:\windows\system32\cmd.exe (das Verzeichnis ist installations-abhängig).

Der Prozess wird unter Unix mit execvp() und unter Windows mit CreateProcess() gestartet.

Parameter

command_line

terminated

 

Boolean   $subprocess->terminated

 

Prüft, ob der Prozess geendet hat. Wenn er geendet hat, kann anschließend Subprocess.exit_code und Subprocess.termination_signal gerufen werden.

termination_signal

Signal, mit dem sich der Prozess beendet hat (nur Unix)

 

int   $subprocess->termination_signal

 

Erst aufrufen, wenn Subprocess.terminated == true.

timeout

Frist für den Subprozess

 

$subprocess->LetProperty( 'timeout', double seconds )

 

Nach Ablauf der Zeit bricht der Scheduler den Subprozess ab (Unix: mit SIGKILL).

Bei Ausführung auf einem entfernten Rechner mit <process_class remote_scheduler="…"> wirkt die Frist nicht.

Parameter

seconds

Meldungen

[warn] SCHEDULER-849 Timeout is not possible for a subprocess running on a remote host (it cannot be killed), pid=(1) 

wait_for_termination

 

$subprocess->wait_for_termination()
Boolean   $subprocess->wait_for_termination( double seconds )

Parameter

seconds

Wartezeit. Fehlt der Parameter, dann wartet der Aufruf bis der Subprozess geendet hat.

Rückgabe

Boolean  

true, wenn der Subprozess geendet hat.
false, wenn der Subprozess nach Ablauf der Wartezeit noch läuft.


Software- und Organisations-Service GmbH

Zuletzt geändert von Joacim Zschimmer, 2007-10-25