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 theirPvmOutputTid 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.