From nobody Wed Apr 16 19:46:31 2025 X-Original-To: dev-commits-src-main@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 4ZdBNm0Yfbz5t8jJ; Wed, 16 Apr 2025 19:46:32 +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 "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ZdBNl5PdMz3l6M; Wed, 16 Apr 2025 19:46:31 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1744832791; 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=0QHzjcVB4oC/7z5zKttRImFT8C/x3rUK6NqWDQopDhY=; b=mgzpfXiyb1sNMuZEDXzd4RVUxIQp7BMGDK+BDpN8A8axk6xXe+SCQzVJSiRn/inChLlsqW xr6ibheNwjwhNcfUpfC8bZMP2WR6XRb0Tlm7BOX2uFdzsKxNKfPcatQ3d0xbH5hC2AVv/j O357QMJBOw7TvSA13xAyNYlSRx5RFa02woiFFGjtRj08szzTSfS1Gcy94Lq2JZ36MocBT7 uAwrJQwexiVEaIZd+n9330HiaZY6L7EcppGFkOke7OIToE+yJV5KRepwAKEeTv9HMOOBFy 8lo1Yp+gxo6GNn2Ms31Q/84V7hlnyIM31mAS1o1XvrlCxpDLCmYv5iBTBz1Ohw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1744832791; a=rsa-sha256; cv=none; b=tP1LCEDuQBJrPtk9cANpxfNl//HnsK9t0ojxthuY8pKmvEvM4tUPjt596FknyBcqsuUJCH v339NWR2T+3rRAIvr44DAsk31zCDnHKdsv2esWs0ZUZ9cOa24S+DVkuJO0VdDjpsmg0J8C 9rJJNmQTMpqy5hj98q2bXJSwkjCJ9V01lx4hvzrcUzITx8wtCHblEcMrGDABleSDnAXVSl CM/31203TjlnZF4BDJj0ycWvV9M6xR2zpCYsxPwHop1dub6K7EkAtYWrCkdaycXAKor5Wh 6n8yDrfsEZylQn0iqaDHI2aXRxFzHN4o1m0OmbCOK/1NJGn5eiEYt9vdEX+Ikw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1744832791; 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=0QHzjcVB4oC/7z5zKttRImFT8C/x3rUK6NqWDQopDhY=; b=bBNQmVRCagRgEoTjfTnS7Sa1shPnPSlO/HZn/ujL29GumKajhA9zQb1TQkTzsDmuRMsXb1 cdhVe5QxCzt3uEgPGiJh8wOh3KXfrAhM2nolwX32tq3cs7/9hz4kcs0fe91fNDoYFKXxEv V9LAhtkXOvBsLknP7jZwE0eEdWVKbho1hxPLUVQiB7yECiZRW0oSb/APmJiqfMdm3EeyVA iIVrvNMCPrCeGMjtCJYO0ZhXCJ9OWjaMMd8ziOz+FTVWvKm6KY1MJmPQuHZw+G+SjPoLH5 fjRYPRxFUTZNUBI2QuQRDMMLZSQRiGcJNyzhaHQ2khH7wPpeawrfBbVLb95f2A== 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 4ZdBNl4g6kz21h; Wed, 16 Apr 2025 19:46:31 +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 53GJkVZ1063744; Wed, 16 Apr 2025 19:46:31 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 53GJkVSD063741; Wed, 16 Apr 2025 19:46:31 GMT (envelope-from git) Date: Wed, 16 Apr 2025 19:46:31 GMT Message-Id: <202504161946.53GJkVSD063741@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Baptiste Daroussin Subject: git: 086f17853677 - main - timeout(1): Enhance send_sig() and prepare for later updates List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bapt X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 086f17853677d072b8c5f4b2440f9e3a9aea7bdf Auto-Submitted: auto-generated The branch main has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=086f17853677d072b8c5f4b2440f9e3a9aea7bdf commit 086f17853677d072b8c5f4b2440f9e3a9aea7bdf Author: Aaron LI AuthorDate: 2025-04-02 15:51:47 +0000 Commit: Baptiste Daroussin CommitDate: 2025-04-16 19:45:38 +0000 timeout(1): Enhance send_sig() and prepare for later updates Enhance send_sig() to better encapsulate the signal sending for both foreground and non-foreground modes. This also fixes the issue that the latter mode was missing verbose messages. In addition, improve the verbose logging for signals. Obtained-from: DragonFly BSD --- 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);