From nobody Wed Apr 16 19:46:30 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 4ZdBNk5HByz5t8SY; Wed, 16 Apr 2025 19:46:30 +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 4ZdBNk42tQz3kr5; Wed, 16 Apr 2025 19:46:30 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1744832790; 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=7XDJqIdWIcsb+y0fWo631TjNcjDAB+aO4PEfGOn3XFk=; b=Z7d9X56Mml8iqPlm7Sc6F3KBsucu+mnMaPLw8Yx+efk2RD9ap10fShSSXE+64LuIie3nL6 c0AAL5OfDeIkalzCi/8JQFeBOAK19xDhdnju4qMO71434SNsocEnCD5lIA4Epe2xpS7/CC t3C/GEmSxSIx0mezJ/BwmlsCAvlzJAeVIqsfZ07cJx3oiigjjPRpIlNMqh+IpfTC7SwNkN 8vB0Nvj8Y3OtBKc5BPgkY7MwaxXUbe5pxL+oiickE9n9N4RKNfI9EzXmit32RLhC7K99QD RmQi5/zC5xmyx/fQFAHssJYwHNi19OjK1za596Dk/hp1B0IjKWpHGIXPjqpHZg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1744832790; a=rsa-sha256; cv=none; b=wUzcFsP5bJw/jFfTr/Bjwq2ZYX4GPC8vjNCcVRDd951RclQYEO20MdBwo6lpGSG4ro8Lj3 zL2YSVpw4ZMi6bY5w6wdIE3n7mF8jzO/DMGENwFxqoCjics5cclKacxjz9+dRh3IQrgsN+ B5qWyeI97OSsDxBHPCWPIkk8oj+a/h1UNxAgiegqr6jGydZVpkyjxtXng2BDk7iyqPdX5y cHGpet4bci/FTGEmB71TjA9nmb2P2yJ65//9o4ioWwXnsOscEdIcy8nfeTwNm1S2tDvbIt KfztQXlX5PlsRxF6Jw2h8E5Vx2kZ+1P/8kQaMwP7UBBer0huyHRflMOOWNEVlg== 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=1744832790; 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=7XDJqIdWIcsb+y0fWo631TjNcjDAB+aO4PEfGOn3XFk=; b=HZoRqmIi/YTbXzNMGoc3A0jSAl9iPEf/P0SZFLGpyqbW4STtg3ckvjDXKZefWNjaXkSEx8 iw3q5DdthcWvOD0/CgDWAw4vU5Cc/Cv0vGke8hbKuGYo8SwJd1YnVKcsYeBppnjKPwR/xR A52hl1azxzkcWZT7KwRz+1AfceUXkVO0TJbKUOeXHAZBOWhksmupCb4HQaYHlPYrlU34EU wP7nW7UGzqNZ8tGrgKkpwst8H0/sX9YtXUUBmnEreoMGIQK8bJSqHnP7BqzBcNWu169AV+ WgSC1eMbAmPFXeELTIHAWE3XeUK6v47PvubI+xNF4rYSa8clMgIsscKKwGO81w== 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 4ZdBNk3bYtz2Ft; Wed, 16 Apr 2025 19:46:30 +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 53GJkUZp063706; Wed, 16 Apr 2025 19:46:30 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 53GJkUkm063703; Wed, 16 Apr 2025 19:46:30 GMT (envelope-from git) Date: Wed, 16 Apr 2025 19:46:30 GMT Message-Id: <202504161946.53GJkUkm063703@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: 8a9927ecd4b6 - main - timeout(1): Add -f and -p options as per POSIX.1-2024 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: 8a9927ecd4b6e8cb306e4b940201b4efbfbc5dcb Auto-Submitted: auto-generated The branch main has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=8a9927ecd4b6e8cb306e4b940201b4efbfbc5dcb commit 8a9927ecd4b6e8cb306e4b940201b4efbfbc5dcb Author: Aaron LI AuthorDate: 2025-04-02 15:29:57 +0000 Commit: Baptiste Daroussin CommitDate: 2025-04-16 19:45:38 +0000 timeout(1): Add -f and -p options as per POSIX.1-2024 POSIX.1-2024 first defined the timeout(1) utility and specified the '-f' and '-p' options, which are the short versions of '--foreground' and '--preserve-status' options, respectively. Add the short versions to comply with the Standard. Obtained-from: DragonFly BSD Reference: https://pubs.opengroup.org/onlinepubs/9799919799/utilities/timeout.html --- 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;