NAME¶
pvm_catchout - Catch output from child tasks.
SYNOPSIS¶
C #include <stdio.h>
int info = pvm_catchout( FILE *ff )
Fortran call pvmfcatchout( onoff, info )
PARAMETERS¶
- ff
- File descriptor on which to write collected output.
- onoff
- Integer parameter. Turns output collection on or off.
- info
- Integer status code returned by the routine. Values less than zero
indicate an error.
DESCRIPTION¶
The routine
pvm_catchout causes the calling task (the parent) to catch
output from any tasks spawned after the call to
pvm_catchout.
Characters printed on
stdout or
stderr in children tasks are
collected by the pvmds and sent in control messages to the parent task, which
tags each line and appends it to the specified file. Output from grandchildren
(spawned by children) tasks is also collected, provided the children don't
reset their
PvmOutputTid.
If option
PvmShowTids (see
pvm_setopt) is true (nonzero), output
is printed as shown below, tagged with the task id where the output
originated:
[txxxxx] BEGIN
[txxxxx] (text from child task)
[txxxxx] END
The output from each task includes one BEGIN line and one END line, with
whatever the task prints in between. If PvmShowTids is false, raw output is
printed with no additional information.
In C, the output file descriptor may be specified. Giving a null pointer turns
output collection off for any subsequently spawned child tasks. (Any existing
output collection will still proceed at the child tasks, until they exit or
change their
PvmOutputTid or related settings - see man page for
pvm_setopt().) In Fortran, output collection can only be turned on or off
(again only for subsequently spawned child tasks), and is always logged to the
stdout of the parent task.
If
pvm_exit is called while output collection is in effect, it will block
in order to print all the output, until all tasks sending the given task
output have exited. To avoid this, output collection can be turned off by
calling pvm_catchout(0) before calling pvm_exit.
pvm_catchout() always returns 0.
EXAMPLES¶
C:
#include <stdio.h>
pvm_catchout(stdout);
Fortran:
CALL PVMFCATCHOUT( 1, INFO )
SEE ALSO¶
pvm_exit(3PVM), pvm_setopt(3PVM), pvm_spawn(3PVM)