The function orte_iof_base_setup_prefork attempts to create a pty for child stdout and falls back to plain pipe if openpty fails. Child uses the 'usepty' flag to decide whether to treat this descriptor as a pty or as a pipe. Set 'usepty' flag to 0 upon openpty failure to inform the child that it isn't dealing with a pty even though pty has been requested.
Patch applies against svn trunk and v1.6.5, where I found this issue. Index: orte/mca/iof/base/iof_base_setup.c =================================================================== --- orte/mca/iof/base/iof_base_setup.c (revision 29155) +++ orte/mca/iof/base/iof_base_setup.c (working copy) @@ -94,6 +94,7 @@ #endif if (ret < 0) { + opts->usepty = 0; if (pipe(opts->p_stdout) < 0) { ORTE_ERROR_LOG(ORTE_ERR_SYS_LIMITS_PIPES); return ORTE_ERR_SYS_LIMITS_PIPES;