diff --git a/src/slurmd/slurmstepd/mgr.c b/src/slurmd/slurmstepd/mgr.c index a8c4922f018efef8a0615a2755f7de7c7741d86a..87b5fdaf04e3fd9938ea11e08dbd963fda7c58fc 100644 --- a/src/slurmd/slurmstepd/mgr.c +++ b/src/slurmd/slurmstepd/mgr.c @@ -1192,7 +1192,7 @@ static int exec_wait_signal (struct exec_wait_info *e, slurmd_job_t *job) return (0); } -static void prepare_tty (slurmd_job_t *job, slurmd_task_info_t *task) +static void prepare_stdio (slurmd_job_t *job, slurmd_task_info_t *task) { #ifdef HAVE_PTY_H if (job->pty && (task->gtid == 0)) { @@ -1200,8 +1200,10 @@ static void prepare_tty (slurmd_job_t *job, slurmd_task_info_t *task) error("login_tty: %m"); else debug3("login_tty good"); + return; } #endif + io_dup_stdio(task); return; } @@ -1320,9 +1322,12 @@ _fork_all_tasks(slurmd_job_t *job) xsignal_unblock(slurmstepd_blocked_signals); /* - * Setup tty before any setpgid() calls + * Need to setup stdio before setpgid() is called + * in case we are setting up a tty. (login_tty() + * must be called before setpgid() or it is + * effectively disabled). */ - prepare_tty (job, job->task[i]); + prepare_stdio (job, job->task[i]); /* * Block until parent notifies us that it is ok to diff --git a/src/slurmd/slurmstepd/task.c b/src/slurmd/slurmstepd/task.c index 390943bb49c86cb777280b992441a7d5a7a75232..0137fdc7edb5f01c90be2a63c84f375a8f60ba99 100644 --- a/src/slurmd/slurmstepd/task.c +++ b/src/slurmd/slurmstepd/task.c @@ -83,7 +83,6 @@ #include "src/common/xmalloc.h" #include "src/slurmd/slurmd/slurmd.h" -#include "src/slurmd/slurmstepd/io.h" #include "src/slurmd/slurmstepd/pdebug.h" #include "src/slurmd/slurmstepd/task.h" #include "src/slurmd/slurmstepd/ulimits.h" @@ -392,9 +391,6 @@ exec_task(slurmd_job_t *job, int i) } } - if (!job->pty) - io_dup_stdio(task); - /* task-specific pre-launch activities */ if (spank_user_task (job, i) < 0) {