From nobody Mon Jun 16 08:54:01 2025 X-Original-To: dev-commits-src-branches@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4bLP1k1Svkz5Vplg; Mon, 16 Jun 2025 08:54:02 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4bLP1j6T3Vz3wJF; Mon, 16 Jun 2025 08:54:01 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1750064041; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=NRzxHIiEq+bOgRlblvsdUlqKfX3csse8LImkH4wFtu4=; b=mW9RIv+XghA/fa4xI3gxIKQ+oo9QwcmZEzgewJBRccIwG8qMEfdEFl1RMLwfauc1DJSz+A ljpBsBd6bNBImSKTH+SM9GHivIukDAeYrkcQf2c95z2isxEhifDtwcskMCeVxfxbBBQzBE Xw2UzHGalQV7U6Zw0VBYR7FXvr/fnyO2qBoeE0ehMy5ZSGPfUCkPAntnbkMszUT0SIDJy3 0KMDa7UuHMkFE5mECiAX0MJ6jjaoaIqht7zVvXnr/dSA58TDo96hgXQNfxYqaRfQjjesLE DiCwLHyDrDdKfy9pfMkQww6male6cpyIiFhCTOomQg8oE8rps5AA7vZurFfi8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1750064041; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=NRzxHIiEq+bOgRlblvsdUlqKfX3csse8LImkH4wFtu4=; b=Z2h3nVFpc3CU78HBUKNRXwuNZJVp6WKdVbxDqznYlBMQ1FODwdmZhUZHwEPSsQ9Wt096TZ 0vaNjszsGHzYazcGfZ5jkJyzfshWfezKH5q1/3QF2P52Rzcs8qEG5/f9cHYEvgcQQEBBdA pJkUuoHg5KDvb2AVaXj5Y8UC+iHDPssOsyy6brtmdfGb8J1NBmmP3jjj9Mjht18hiRxXRX xnEw9NXet/xWT5Vzp+P8Srcn4afRwSO4VJgkyq6l6MhmAf2du6xc7p3xiEB06vTzew0q57 1X9I4e4DQi4yv2FfRN6Mw0cwlAjLRMXcrV4AvzSxs/8XvdJTZr10gyc/qVlXJg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1750064041; a=rsa-sha256; cv=none; b=VjGB2EkJ8bjrmg2Ruua0yAucy4iMteTOsF4w7Cqo3EwH8dD8FXwjX1g3Lh+fhUP8EPk/q0 oL6uRD2YrDCPixwfVSB5Pwe206UvQBts76vnUyTSyD5M+TOG7EsCAkvJX89I8gilK8M6ra KUbudxmGOfu9XEtgoEkiI+2cg67dTQvNxEhPJHu5lAPuEDV5DqoPZ8PeeJU+60O9RHqTOz de7TIRwuDbzQlB54OxZVw9FC3TnFb4vP6L98de88vVFxFk2RPf3bOIwIhtvAQSha757m+A 58Dj6sVLDR/o312AaTUZwUSS+NKuWvH9H064RYvtONlsnqPXrV0wNHABLEV3Uw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4bLP1j5s6JzrJ2; Mon, 16 Jun 2025 08:54:01 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 55G8s1T9043245; Mon, 16 Jun 2025 08:54:01 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 55G8s162043242; Mon, 16 Jun 2025 08:54:01 GMT (envelope-from git) Date: Mon, 16 Jun 2025 08:54:01 GMT Message-Id: <202506160854.55G8s162043242@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Konstantin Belousov Subject: git: 48cbc068c88f - stable/14 - timeout(1): Enhance send_sig() and prepare for later updates List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 48cbc068c88f96cc19c658bd6f759496e00fcca4 Auto-Submitted: auto-generated The branch stable/14 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=48cbc068c88f96cc19c658bd6f759496e00fcca4 commit 48cbc068c88f96cc19c658bd6f759496e00fcca4 Author: Aaron LI AuthorDate: 2025-04-02 15:51:47 +0000 Commit: Konstantin Belousov CommitDate: 2025-06-16 08:51:52 +0000 timeout(1): Enhance send_sig() and prepare for later updates (cherry picked from commit 086f17853677d072b8c5f4b2440f9e3a9aea7bdf) --- bin/timeout/timeout.c | 46 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/bin/timeout/timeout.c b/bin/timeout/timeout.c index 7e4009f8ac8a..8f933f509407 100644 --- a/bin/timeout/timeout.c +++ b/bin/timeout/timeout.c @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include @@ -63,6 +64,19 @@ usage(void) exit(EXIT_FAILURE); } +static void +logv(const char *fmt, ...) +{ + va_list ap; + + if (!verbose) + return; + + va_start(ap, fmt); + vwarnx(fmt, ap); + va_end(ap); +} + static double parse_duration(const char *duration) { @@ -146,13 +160,25 @@ sig_handler(int signo) } static void -send_sig(pid_t pid, int signo) +send_sig(pid_t pid, int signo, bool foreground) { - if (verbose) { - warnx("sending signal %s(%d) to command '%s'", - sys_signame[signo], signo, command); + struct procctl_reaper_kill rk; + + 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]); + } else { + memset(&rk, 0, sizeof(rk)); + rk.rk_sig = signo; + if (procctl(P_PID, getpid(), PROC_REAP_KILL, &rk) == -1) + warnx("procctl(PROC_REAP_KILL)"); + else if (rk.rk_fpid > 0) + warnx("failed to signal some processes: first pid=%d", + (int)rk.rk_fpid); + logv("signaled %u processes", rk.rk_killed); } - kill(pid, signo); } static void @@ -188,7 +214,6 @@ main(int argc, char **argv) bool child_done = false; struct sigaction signals; struct procctl_reaper_status info; - struct procctl_reaper_kill killemall; int signums[] = { -1, SIGTERM, @@ -329,14 +354,7 @@ main(int argc, char **argv) sig_term = 0; } - if (foreground) { - send_sig(pid, sig); - } else { - killemall.rk_sig = sig; - killemall.rk_flags = 0; - procctl(P_PID, getpid(), PROC_REAP_KILL, - &killemall); - } + send_sig(pid, sig, foreground); if (do_second_kill) { set_interval(second_kill);