diff --git a/src/slurmd/shm.c b/src/slurmd/shm.c
index 14eb4ebd687430d295d1b30610b46b760575ca87..486b36252e9ed68d835def6332df2bf2f004227d 100644
--- a/src/slurmd/shm.c
+++ b/src/slurmd/shm.c
@@ -856,16 +856,20 @@ _shm_clear_stale_entries(void)
 	for (i = 0; i < MAX_JOB_STEPS; i++) {
 		job_step_t *s = &slurmd_shm->step[i];
 		task_t     *t = s->task_list;
+		bool        active_tasks = false;
 
-		if (s->state == SLURMD_JOB_UNUSED) 
+		if ((s->state == SLURMD_JOB_UNUSED)	/* unused */
+		||  (s->sid <= (pid_t) 0)		/* empty */
+		||  (kill(-s->sid, 0) == 0))		/* still active */ 
 			continue;
 
-		while (t->next && t->id != 0) 
+		while (t && !active_tasks) {
+			if (t->pid && (kill(-t->pid, 0) == 0))
+				active_tasks = true;
 			t = t->next;
+		}
 		
-		if (  (s->sid > (pid_t) 0) 
-		   && (kill(-s->sid, 0) != 0)
-		   && (kill(-t->pid, 0) != 0)) {
+		if (!active_tasks) {
 			debug ("Clearing stale job %u.%u from shm",
 					s->jobid, s->stepid);
 			_shm_clear_step(s);