git: 15e4b8d5ef84 - main - timeout(1): silence warnings for ESRCH
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 09 Jun 2025 23:53:18 UTC
The branch main has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=15e4b8d5ef845066819c4cbb5d03b63148688298
commit 15e4b8d5ef845066819c4cbb5d03b63148688298
Author: Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2025-06-07 11:24:32 +0000
Commit: Konstantin Belousov <kib@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",