Hi Oleg, I'm back looking at SIGNAL_UNKILLABLE and debugging child reapers again, and the current issue is when running code in the target process, SIGTRAP firing and that causing SIGNAL_UNKILLABLE protection to be removed in force_sig_info():
if (action->sa.sa_handler == SIG_DFL) t->signal->flags &= ~SIGNAL_UNKILLABLE; Would relaxing that if the task is being traced with something like diff --git i/kernel/signal.c w/kernel/signal.c index 7e59ebc2c25e..f701f1889895 100644 --- i/kernel/signal.c +++ w/kernel/signal.c @@ -1185,7 +1185,7 @@ force_sig_info(int sig, struct siginfo *info, struct task_struct *t) recalc_sigpending_and_wake(t); } } - if (action->sa.sa_handler == SIG_DFL) + if (action->sa.sa_handler == SIG_DFL && !t->ptrace) t->signal->flags &= ~SIGNAL_UNKILLABLE; ret = specific_send_sig_info(sig, info, t); spin_unlock_irqrestore(&t->sighand->siglock, flags); make any sense? It does address the issue that I'm seeing, but are there any downsides to doing so? Thanks, Jamie