The branch main has been updated by kib:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=15e4b8d5ef845066819c4cbb5d03b63148688298

commit 15e4b8d5ef845066819c4cbb5d03b63148688298
Author:     Konstantin Belousov <k...@freebsd.org>
AuthorDate: 2025-06-07 11:24:32 +0000
Commit:     Konstantin Belousov <k...@freebsd.org>
CommitDate: 2025-06-09 23:51:06 +0000

    timeout(1): silence warnings for ESRCH
    
    It is possible for the child to become zombie and then there is nothing
    to signal.
    
    Reported and tested by: pho
    Reviewed by:    markj
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D50752
---
 bin/timeout/timeout.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/bin/timeout/timeout.c b/bin/timeout/timeout.c
index e9c4e22fc7d3..424e72dac9ad 100644
--- a/bin/timeout/timeout.c
+++ b/bin/timeout/timeout.c
@@ -188,16 +188,23 @@ static void
 send_sig(pid_t pid, int signo, bool foreground)
 {
        struct procctl_reaper_kill rk;
+       int error;
 
        logv("sending signal %s(%d) to command '%s'",
             sys_signame[signo], signo, command);
        if (foreground) {
-               if (kill(pid, signo) == -1)
-                       warnx("kill(%d, %s)", (int)pid, sys_signame[signo]);
+               if (kill(pid, signo) == -1) {
+                       if (errno != ESRCH)
+                               warnx("kill(%d, %s)", (int)pid,
+                                   sys_signame[signo]);
+               }
        } else {
                memset(&rk, 0, sizeof(rk));
                rk.rk_sig = signo;
-               if (procctl(P_PID, getpid(), PROC_REAP_KILL, &rk) == -1)
+               error = procctl(P_PID, getpid(), PROC_REAP_KILL, &rk);
+               if (error == 0 || (error == -1 && errno == ESRCH))
+                       ;
+               else if (error == -1)
                        warnx("procctl(PROC_REAP_KILL)");
                else if (rk.rk_fpid > 0)
                        warnx("failed to signal some processes: first pid=%d",

Reply via email to