From: cheloha Date: Fri, 3 Nov 2023 19:16:31 +0000 (+0000) Subject: timeout(1): align execvp(3) failure statuses with GNU timeout X-Git-Url: http://artulab.com/gitweb/?a=commitdiff_plain;h=17e3ddc9933714bd053ce70afd6d575a774aee60;p=openbsd timeout(1): align execvp(3) failure statuses with GNU timeout Align our exit statuses with those of GNU timeout in the execvp(3) failure case. Exit with 127 if the utility is not found. Exit with 126 if we cannot execute the utility for any other reason. While here, the child should _exit(2) instead of calling exit(3) via err(3). Update the manpage accordingly. With input from millert@ and deraadt@. Link: https://marc.info/?l=openbsd-tech&m=169739592322978&w=2 ok millert@ --- diff --git a/usr.bin/timeout/timeout.1 b/usr.bin/timeout/timeout.1 index d99ceac62e9..6a77deb6dab 100644 --- a/usr.bin/timeout/timeout.1 +++ b/usr.bin/timeout/timeout.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: timeout.1,v 1.7 2023/01/12 14:08:39 jmc Exp $ +.\" $OpenBSD: timeout.1,v 1.8 2023/11/03 19:16:31 cheloha Exp $ .\" $NetBSD: timeout.1,v 1.4 2016/10/13 06:22:26 dholland Exp $ .\" .\" Copyright (c) 2014 Baptiste Daroussin @@ -27,7 +27,7 @@ .\" .\" $FreeBSD: head/usr.bin/timeout/timeout.1 268861 2014-07-18 22:56:59Z bapt $ .\" -.Dd $Mdocdate: January 12 2023 $ +.Dd $Mdocdate: November 3 2023 $ .Dt TIMEOUT 1 .Os .Sh NAME @@ -92,20 +92,29 @@ hours days .El .Sh EXIT STATUS -If the timeout was not reached or -.Fl p -was set, the exit status of -.Ar command -is returned. +The +.Nm +utility may return one of the following statuses: .Pp -If the timeout was reached and +.Bl -tag -width indent -compact +.It 124 +The time limit expired and the .Fl p -was not set, an exit status of 124 is returned. -.Pp -If +flag was not set. +.It 126 +The +.Ar command +was found but could not be executed. +.It 127 +The .Ar command -exited after receiving a signal, the exit status returned is the signal number -plus 128. +was not found. +.El +.Pp +Otherwise, +.Nm +returns the exit status of the +.Ar command . .Sh SEE ALSO .Xr kill 1 , .Xr signal 3 diff --git a/usr.bin/timeout/timeout.c b/usr.bin/timeout/timeout.c index fb4d9c81970..0bf7d5d41c5 100644 --- a/usr.bin/timeout/timeout.c +++ b/usr.bin/timeout/timeout.c @@ -1,4 +1,4 @@ -/* $OpenBSD: timeout.c,v 1.25 2023/01/13 06:53:04 cheloha Exp $ */ +/* $OpenBSD: timeout.c,v 1.26 2023/11/03 19:16:31 cheloha Exp $ */ /* * Copyright (c) 2021 Job Snijders @@ -260,7 +260,8 @@ main(int argc, char **argv) signal(SIGTTOU, SIG_DFL); execvp(argv[0], argv); - err(1, "%s", argv[0]); + warn("%s", argv[0]); + _exit(errno == ENOENT ? 127 : 126); } /* parent continues here */