diff --git a/src/slurmd/elan_interconnect.c b/src/slurmd/elan_interconnect.c
index fd07c6ad46981578f1b24b3153ac7df6bb22e538..7a114f5767a509dadd96afaa60a88bd639a16a18 100644
--- a/src/slurmd/elan_interconnect.c
+++ b/src/slurmd/elan_interconnect.c
@@ -29,6 +29,7 @@ static int do_env(int nodeid, int nnodes, int procid, int nprocs) ;
 /*launch_tasks should really be named launch_job_step*/
 int launch_tasks ( launch_tasks_request_msg_t * launch_msg )
 {
+	pthread_atfork ( NULL , NULL , pthread_fork_child_after ) ;
 	return interconnect_init ( launch_msg );
 }
 
diff --git a/src/slurmd/no_interconnect.c b/src/slurmd/no_interconnect.c
index 5e463187009c00aab32cff5687b141bca67c9b9b..198a50096403ee95673e8a6f95f0e71f3513d63d 100644
--- a/src/slurmd/no_interconnect.c
+++ b/src/slurmd/no_interconnect.c
@@ -6,6 +6,7 @@
 /*launch_tasks should really be named launch_job_step*/
 int launch_tasks ( launch_tasks_request_msg_t * launch_msg )
 {
+	pthread_atfork ( NULL , NULL , pthread_fork_child_after ) ;
 	return interconnect_init ( launch_msg );
 }
 
diff --git a/src/slurmd/task_mgr.c b/src/slurmd/task_mgr.c
index 04eaa8a1d1d35987290c867f60ecc66de873fe84..8fa1577a4e23a217a18b869e84bce5d8bb880efd 100644
--- a/src/slurmd/task_mgr.c
+++ b/src/slurmd/task_mgr.c
@@ -319,3 +319,18 @@ int reattach_tasks_streams ( reattach_tasks_streams_msg_t * req_msg )
 	}
 	return error_code ;
 }
+
+void pthread_fork_before ( void )
+{
+}
+
+void pthread_fork_parent_after ( void )
+{
+}
+
+void pthread_fork_child_after ( void )
+{
+	log_options_t log_opts_def = LOG_OPTS_STDERR_ONLY ;
+	log_init( "slurmd", log_opts_def, SYSLOG_FACILITY_DAEMON, NULL);
+}
+
diff --git a/src/slurmd/task_mgr.h b/src/slurmd/task_mgr.h
index 0d85af381c7201cca8be7a163fd2c1abd159221b..8095866737b8cee789b09dd49fd3edbc81ea0404 100644
--- a/src/slurmd/task_mgr.h
+++ b/src/slurmd/task_mgr.h
@@ -52,6 +52,10 @@ int reattach_tasks_streams ( reattach_tasks_streams_msg_t * req_msg ) ;
 
 void * task_exec_thread ( void * arg ) ;
 
+void pthread_fork_before ( void );
+void pthread_fork_parent_after ( void );
+void pthread_fork_child_after ( void );
+
 typedef struct task_start
 {
 	/*task control thread id*/