| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Annotate logv() and fix format string bug.
* Don't reinvent str2sig(3).
* Reorganize kill_self() so we unblock signals as late as possible, and
use raise(2) instead of kill(2).
* Explicitly close unused pipe descriptors.
* Use correct type to collect result of read(2) and write(2).
* Compare return values to 0, not -1.
* Sort local variables according to style(9).
* Reduce unnecessary nesting.
* Reindent.
* Fix typo in manual page.
MFC after: 1 week
Sponsored by: Klara, Inc.
Reviewed by: kevans
Differential Revision: https://reviews.freebsd.org/D55277
|
| |
|
|
| |
Requested by: kevans
|
| |
|
|
|
|
|
| |
Reviewed by: markj
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D50752
|
| |
|
|
|
|
|
|
|
|
|
| |
Switch to use waitid(2) to receive siginfo_t with the complete error
code from the exited process.
Tested by: pho
Reviewed by: markj
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D50752
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Since the default disposition for SIGCHLD is ignore, the prematurely
exited child would cause SIGCHLD dropped. This makes timeout(1) hang,
because REAP_STATUS reports a zombie not waited for, but SIGCHLD for it
was already lost, so the main loop cannot exit, instead calling into
sigsuspend().
Reported and tested by: pho
Reviewed by: markj
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D50752
|
| |
|
|
|
|
|
|
| |
Tested by: pho
Reviewed by: markj
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D50752
|
| |
|
|
|
|
|
|
|
|
|
| |
It is possible for the child to become zombie and then there is nothing
to signal.
Reported and tested by: pho
Reviewed by: markj
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D50752
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If timeout(1) runs with the --foreground option, it becomes the reaper
of the command and its descendants and will wait for all of them to
terminate. This behavior is different from the old FreeBSD version and
GNU version.
For example, if there is a descendant running in the background, like:
$ timeout -s INT 2 sh -c 'sleep 4 & sleep 5'
when timeout(1) sends the SIGINT to all descendants, the child 'sh'
process and the foreground 'sleep 5' process will immediately terminate,
but the background 'sleep 4' will be reparented to the timeout(1)
itself. Because a background process ignores SIGINT and SIGQUIT,
the whole command completes until the background 'sleep 4' finishes.
In comparison, the old FreeBSD version and GNU version will just
terminate itself, letting the background 'sleep 4' process be reparented
to an upper reaper like init.
The POSIX.1-2024 standard doesn't specify the required behavior in such
cases, so I decided to keep the current implementation. Nonetheless,
the updated timeout(1) has changed a lot in order to conform to the
standard.
Obtained-from: DragonFly BSD
|
| |
|
|
|
|
|
| |
atf-check cannot check anymore the exit number if the program is
terminated via a signal, it needs to be catched by -s signal
because we cannot pass twice the -s command, we cannot anymore check
for the exit value :(
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
A shell may not set '$?' to '128 + signal_number' when the process was
terminated by a signal. For example, KornShell 93 sets '$?' to
'256 + signal_number' in such cases. In order to avoid any possible
ambiguity, the POSIX.1-2024 standard requires that timeout mimic the
wait status of the child process by terminating itself with the same
signal, while disabling core generation.
Update the man page accordingly.
Obtained-from: DragonFly BSD
Reference: https://pubs.opengroup.org/onlinepubs/9799919799/utilities/timeout.html
|
| |
|
|
|
|
|
|
|
|
|
|
| |
The POSIX.1-2024 standard requires that timeout(1) utility propagate all
signals except SIGALRM, so timeout(1) needs to catch all signals for
this purpose. In addition, we need to separate those signals whose
default action is to terminate the program, because timeout(1) should
start the second timer for the kill signal if those signals are
received.
Obtained-from: DragonFly BSD
Reference: https://pubs.opengroup.org/onlinepubs/9799919799/utilities/timeout.html
|
| |
|
|
|
|
|
|
|
|
|
| |
POSIX.1-2024 requires that the child process inherit the same signal
dispositions as the timeout(1) utility inherited, except for the signal
to be sent upon timeout.
For example, when timeout(1) is run by nohup(1), the command should be
protected from SIGHUP.
Obtained-from: DragonFly BSD
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This actually fixes the following two issues:
* If a terminating signal (e.g., HUP/INT/TERM) was received, timeout
would propagate it to the command and then ignore it. So it was
unable to resend the same terminating signal to the command. This was
different from the GNU's timeout(1), and also contradicted the
POSIX.1-2024 standard.
* Sending two different terminating signals would break timeout(1)'s
--kill-after mechanism. That was because the second signal would
break the for() loop, so the second SIGALRM set by '--kill-after'
would never be caught.
For example, in one shell run:
$ time timeout -f -v -s INT -k 1 2 sh -T -c \
'trap date INT HUP; sleep 5; echo ok; date'
and in another shell run:
$ pkill -INT timeout; pkill -HUP timeout
in the end, the time(1) would report it cost 5 seconds instead of the
expected 3 seconds.
Obtained-from: DragonFly BSD
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The POSIX.1-2024 says:
"If the subsequent wait status of the child process shows that it was
stopped by a signal, a SIGCONT signal shall also be sent in the same
manner as the first signal; otherwise, a SIGCONT signal may be sent in
the same manner."
As it's allowed by the standard, we just always send the SIGCONT signal
to the child process regardless of its stop state, so that timeout could
terminate a stopped child.
Obtained-from: DragonFly BSD
Reference: https://pubs.opengroup.org/onlinepubs/9799919799/utilities/timeout.html
|
| |
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
|
|
|
| |
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
|
| |
|
|
|
|
|
| |
Merge the 'sig_alrm' and 'sig_term' conditionals, and thus reduce some
duplicate code.
Obtained-from: DragonFly BSD
|
| | |
|
| |
|
|
| |
Obtained-from: OpenBSD (via DragonFly BSD)
|
| |
|
|
|
|
|
|
|
| |
* The child should _exit(2) instead of calling exit(3) via err(3) if the
execvp() failed.
* execvp(2) does not return except on error, so there is no need to
check if the return value is -1.
Obtained-from: OpenBSD (via DragonFly BSD)
|
| | |
|
| |
|
|
| |
Obtained-from: OpenBSD (via DragonFly BSD)
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
The -v/--verbose option enables this utility to show diagnosis
info to stderr about any signal sent on timeout.
This implementation refers to GNU coreutils's timeout(1).
Reviewed by: bapt, Alexander Ziaee (manpages)
Approved by: bapt (src)
Obtained from: DragonFlyBSD
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D48225
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Define exit status and macros and use them
- Improve the second kill logic by setting 'do_second_kill = false'
after configuring the second kill
- Minor style tweaks
- Reorder options in the man page, as well as the usage help
- Reorder the exit status in the man page
- Enhance the HISTORY section in the man page (obtained from NetBSD)
Reviewed by: bapt, Alexander Ziaee (manpages)
Approved by: bapt (src)
Obtained from: DragonFlyBSD
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D47866
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Update the STANDARDS section for timeout(1) to
POSIX 1003.1-2024.
Update mandoc to be able to render the
new POSIX macro.
Reviewed by: bapt, bcr
Approved by: bapt
Obtained from: OpenBSD
MFC after: 2 weeks
Differential Revision: https://reviews.freebsd.org/D45691
|
| |
|
|
|
|
|
| |
This is a residual of the $FreeBSD$ removal.
MFC After: 3 days (though I'll just run the command on the branches)
Sponsored by: Netflix
|
| |
|
|
|
|
| |
Signed-off-by: rilysh <nightquick@proton.me>
Reviewed by: imp
Pull Request: https://github.com/freebsd/freebsd-src/pull/872
|
| |
|
|
|
|
| |
Signed-off-by: Elyes Haouas <ehaouas@noos.fr>
Reviewed by: imp
Pull Request: https://github.com/freebsd/freebsd-src/pull/906
|
| |
|
|
| |
Remove /^\.\\"\n\.\\"\s*\$FreeBSD\$$\n/
|
| |
|
|
| |
Remove /^\s*#[#!]?\s*\$FreeBSD\$.*$\n/
|
| |
|
|
| |
Remove /^[\s*]*__FBSDID\("\$FreeBSD\$"\);?\s*\n/
|
| |
|
|
|
| |
Reviewed by: imp
Pull Request: https://github.com/freebsd/freebsd-src/pull/783
|
| |
|
|
|
|
|
|
|
| |
The SPDX folks have obsoleted the BSD-2-Clause-FreeBSD identifier. Catch
up to that fact and revert to their recommended match of BSD-2-Clause.
Discussed with: pfg
MFC After: 3 days
Sponsored by: Netflix
|
|
|
timeout(1) is used by /etc/rc.d/zfskeys. Unfortunately, having
timeout(1) installed in /usr/bin causes problems when /usr is an
encrypted ZFS partition.
Implementing timeout(1) in sh(1) is not trivial. A more elegant solution
is to move timeout(1) to /bin so that it is available to early services
in the boot process.
PR: 265221
Reviewed by: allanjude, des, imp
Approved by: allanjude, des, imp
Reported by: Ivan <r4@sovserv.ru>
Fixes: 33ff39796ffe Add zfskeys rc.d script for auto-loading encryption keys
MFC after: 1 week
Relnotes: yes
Sponsored by: Modirum MDPay
Sponsored by: Klara Inc.
Differential Revision: https://reviews.freebsd.org/D38344
|