From nobody Mon Jun 16 08:54:00 2025 X-Original-To: dev-commits-src-all@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 4bLP1j3krVz5Vplc; Mon, 16 Jun 2025 08:54:01 +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 4bLP1j21G4z3wJ5; 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=4ziVaiVqJO8irIJTZz1KbQg8CUTakTxuDV38CsnZlqE=; b=a0RXDt5Nr1R4iNJ7BNb9t2b/BQdFhLPLabmaspGvLM2l0YY0LAPXoQXIRz3PmvXttdnMpf uW9kCrxQuxDBrchZuZUD4757VSr73+jQ+9/ZedN7/qJ7owjuyE7PcWwqcbq6xHErdiK4bf 5ya/bG7oDjWHMXvya5sudTOTFx0yCGkYjaGc26FeHPsrPi2AxkuayCeNXfH/JThx7FUOEV w2eRMhI3JEE2tc2rZfQktb/+VQoSFKHoXNNF1jaynyRg7vm9ikwaOifWLKb4Yl5f1GdOIZ /S9yA0/W5r+G8zoLtNFh9pKTiPxGS4yO8++RVK7GSYeCAWD2IrhvyQ1kpu67Xg== 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=4ziVaiVqJO8irIJTZz1KbQg8CUTakTxuDV38CsnZlqE=; b=Mx1YnZEQygPfr4Ak46AmSXNmZVJRnJbbN5PvJRSzfQIm/UKHRIsideuWE0vwPmUq4k2ewZ Qs1ZxoJAdKh0KsKQNk2lcOA/2+oD1xI7SGmpH823JefACePgSPv7pEi3SWUNnB8O5BisSn ClRdLdb9ozbVe2vMhYpHS9zgZC+gTxyvHXRREv0O2MDNYjUSbrJLO0EFzKcDSoczyKZzia xZQj0xiYINmU6ncAbZatC5teq47tpy/ZLQEAy3Oxsw2F6+aM0ERo/32xPKIIHrYYWl25dj jUyB1LIo5MacSCDToI26fTpGpmbbs/LupjsoPQsluUDnN66pzzCxdsGGMe9c8g== 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=rzzq9QXsQnLWRJeUYck/QQP53G7WzaUKbW/3lDiAQ5k77Y5pHl9LGWRJddyr3iKKlwBzpk xhtjd2cQpPL9La13alL2fBAf7QeV1k5DD0G3iDC+qPQZMyj6tTBe06sNQhdr4WbNoG2/Pq E+6M2pY4MpJpB7F8tsVZJJn6LNcz49ngqEpAQYj20UM/roudxKpwQBjdwGpjx2UoYZTk/V pbpMec7q43GaG2ZKKaV4U7osxh+AFCeBHwQOqUjr92aaS/r0MaK/rBY3ICLy5VvcOxzsMX NWYnxWo/YrucEhm0o55+N9oYztBx7a8wCqoDo1IRhhUwhdF9Lcg+HbahqxmAqg== 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 4bLP1h4tQrzrkK; Mon, 16 Jun 2025 08:54:00 +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 55G8s0oR043211; Mon, 16 Jun 2025 08:54:00 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 55G8s0a1043208; Mon, 16 Jun 2025 08:54:00 GMT (envelope-from git) Date: Mon, 16 Jun 2025 08:54:00 GMT Message-Id: <202506160854.55G8s0a1043208@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: 865510547e24 - stable/14 - timeout(1): Add -f and -p options as per POSIX.1-2024 List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@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: 865510547e2499cb536137633419f47c7e4f5dea Auto-Submitted: auto-generated The branch stable/14 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=865510547e2499cb536137633419f47c7e4f5dea commit 865510547e2499cb536137633419f47c7e4f5dea Author: Aaron LI AuthorDate: 2025-04-02 15:29:57 +0000 Commit: Konstantin Belousov CommitDate: 2025-06-16 08:51:52 +0000 timeout(1): Add -f and -p options as per POSIX.1-2024 (cherry picked from commit 8a9927ecd4b6e8cb306e4b940201b4efbfbc5dcb) --- bin/timeout/timeout.1 | 8 ++++---- bin/timeout/timeout.c | 35 ++++++++++++++++++++--------------- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/bin/timeout/timeout.1 b/bin/timeout/timeout.1 index b81ce2f74625..3eacdd768410 100644 --- a/bin/timeout/timeout.1 +++ b/bin/timeout/timeout.1 @@ -32,11 +32,11 @@ .Nd run a command with a time limit .Sh SYNOPSIS .Nm +.Op Fl f | Fl -foreground .Op Fl k Ar time | Fl -kill-after Ar time +.Op Fl p | Fl -preserve-status .Op Fl s Ar signal | Fl -signal Ar signal .Op Fl v | Fl -verbose -.Op Fl -foreground -.Op Fl -preserve-status .Ar duration .Ar command .Op Ar arg ... @@ -67,7 +67,7 @@ is 0. .Pp The options are as follows: .Bl -tag -width indent -.It Fl -foreground +.It Fl f , Fl -foreground Only time out the .Ar command itself, but do not propagate signals to its descendants. @@ -79,7 +79,7 @@ signal if is still running after .Ar time since the first signal was sent. -.It Fl -preserve-status +.It Fl p , Fl -preserve-status Always exit with the same status as .Ar command , even if the timeout was reached. diff --git a/bin/timeout/timeout.c b/bin/timeout/timeout.c index 4c81b64cd2b6..7e4009f8ac8a 100644 --- a/bin/timeout/timeout.c +++ b/bin/timeout/timeout.c @@ -56,8 +56,8 @@ static void __dead2 usage(void) { fprintf(stderr, - "Usage: %s [--foreground] [-k time | --kill-after time]" - " [--preserve-status] [-s signal | --signal signal] " + "Usage: %s [-f | --foreground] [-k time | --kill-after time]" + " [-p | --preserve-status] [-s signal | --signal signal] " " [-v | --verbose] [arg ...]\n", getprogname()); exit(EXIT_FAILURE); @@ -175,13 +175,14 @@ int main(int argc, char **argv) { int ch, status, sig; - int foreground, preserve; int pstat = 0; int killsig = SIGTERM; size_t i; pid_t pid, cpid; double first_kill; - double second_kill; + double second_kill = 0; + bool foreground = false; + bool preserve = false; bool timedout = false; bool do_second_kill = false; bool child_done = false; @@ -198,25 +199,29 @@ main(int argc, char **argv) SIGQUIT, }; - foreground = preserve = 0; - second_kill = 0; - + const char optstr[] = "+fhk:ps:v"; const struct option longopts[] = { - { "foreground", no_argument, &foreground, 1 }, - { "help", no_argument, NULL, 'h' }, - { "kill-after", required_argument, NULL, 'k' }, - { "preserve-status", no_argument, &preserve, 1 }, - { "signal", required_argument, NULL, 's' }, - { "verbose", no_argument, NULL, 'v' }, - { NULL, 0, NULL, 0 }, + { "foreground", no_argument, NULL, 'f' }, + { "help", no_argument, NULL, 'h' }, + { "kill-after", required_argument, NULL, 'k' }, + { "preserve-status", no_argument, NULL, 'p' }, + { "signal", required_argument, NULL, 's' }, + { "verbose", no_argument, NULL, 'v' }, + { NULL, 0, NULL, 0 }, }; - while ((ch = getopt_long(argc, argv, "+k:s:vh", longopts, NULL)) != -1) { + while ((ch = getopt_long(argc, argv, optstr, longopts, NULL)) != -1) { switch (ch) { + case 'f': + foreground = true; + break; case 'k': do_second_kill = true; second_kill = parse_duration(optarg); break; + case 'p': + preserve = true; + break; case 's': killsig = parse_signal(optarg); break;