From nobody Mon Aug 3 11:38:41 2026 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 4hDF7637qkz6nByd for ; Mon, 03 Aug 2026 11:38:42 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hDF756hktz3RsC for ; Mon, 03 Aug 2026 11:38:41 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785757121; 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=/8N+i5q5ZOb5jJyOLgopNJXbltuJpT0aSKIONfv4YBM=; b=SxT6vv0fdf2CXDUHENESJAe5AsqU0y1c9XOyZ7B+8eoTlz8FG+rWVaNS59paUEFSaYdEdH e+ovzReezEN0gZXDlCooX1Gmdn8k9dbGa6qSjAsmuX7k3ApOAu1NZCWEFOlnPoIB4qXwE7 w+7lLJyb82fAgxFJtPMBjioXnNygepE2vCJ51H/mTHb+jod0dPefFdevuBw8cXl/wKyX+G Wos/44u5SRl/g6ovfiEfkWH1IASVTIvbfpa0x2NPdnPRUGcXgY7gCzrgM9m+AzFthR5NVZ Aqp20jEjV6OMkGERcu6Q6HEHC4Fsa3RQc+F7HS3yE9d804MYmmiLkWONqbFy6g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1785757121; a=rsa-sha256; cv=none; b=QXIEnRUgH/AVhfEvJCfSe8R9KNRqI8UaEK2usVa8N73sGI7aDCxP/ccfz/Yv2aKcrlNn+t kvGgw7m9ERNUwx+ZhXPytNrtuIuEJzwXhJCEwWYeho/kxIEDPUqf7Y1lJ+OEVZ07rHo7Qd I8wOfFPklUAPCBp2K7q5T+eBwTAlgCgDpCqkcHNQCLxNvI2IL01EdywOCqmeGI8TAeyKA5 D+pAZVEyWMNvL1QxjfDnktK57F/1YRKOn/vFnvWlANKgUG7OsEYe8z1qpBs8t+2BRTmX6p sVnYOy6D5jCAopZRXYDES8WzjiRSKfsZkym3Qt6XfW2/3Zc4hcVbhz8oA76giw== 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=1785757121; 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=/8N+i5q5ZOb5jJyOLgopNJXbltuJpT0aSKIONfv4YBM=; b=Mf5pOJf9ZABdRbM7ywhMKjola8ZLSD48kmYWBnWGIH9D2vADg2IjqfVKFMrRXHtyAdUgrj Mozx7+d/RUXKS+as83zHWLzAS7a6PS34bAbtCH5/WQJlTq+J4o1NaxqsUXm6nem4H+BugT 2+Nd8kikdWjos9lfQ86ts5I5GUoH4pk3JmdPphxNi3NC58XJWo5nb57zQ9S+tUj/JWuaAz EM7Lwfz8EUlvM5NGpdGkuKwCg+UiUCt7l5/WKuYok8z1xNQxHkgSPcTWefkWEGMc33WQdz mrtpegkjaax95NFpjk/3qxJE1NWgIljTPQnhwifYb2P2PxEu9iYf2tJl99uKzA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hDF753FGMzyfM for ; Mon, 03 Aug 2026 11:38:41 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 19742 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 03 Aug 2026 11:38:41 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: 236794f7c229 - stable/15 - pwait: Add a SIGINFO handler 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 List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: 236794f7c22966c2d0612da30b22c8c8737f2aeb Auto-Submitted: auto-generated Date: Mon, 03 Aug 2026 11:38:41 +0000 Message-Id: <6a707dc1.19742.6461c9a8@gitrepo.freebsd.org> The branch stable/15 has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=236794f7c22966c2d0612da30b22c8c8737f2aeb commit 236794f7c22966c2d0612da30b22c8c8737f2aeb Author: Dag-Erling Smørgrav AuthorDate: 2026-07-27 10:15:36 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-08-03 11:32:12 +0000 pwait: Add a SIGINFO handler On SIGINFO, print a space-separated list or remaining processes to standard error. MFC after: 1 week Sponsored by: Klara, Inc. Sponsored by: NetApp, Inc. Reviewed by: kib, markj Differential Revision: https://reviews.freebsd.org/D58386 (cherry picked from commit eddd8aa99ca84c85faea5761af800b5b089d6ba1) --- bin/pwait/pwait.1 | 13 +++++++++++++ bin/pwait/pwait.c | 36 +++++++++++++++++++++++++++++------- 2 files changed, 42 insertions(+), 7 deletions(-) diff --git a/bin/pwait/pwait.1 b/bin/pwait/pwait.1 index 2776d3439a31..4bd43257a82b 100644 --- a/bin/pwait/pwait.1 +++ b/bin/pwait/pwait.1 @@ -88,6 +88,18 @@ Print the exit status when each process terminates or .Ql timeout if the timer goes off earlier. .El +.Pp +If +.Nm +receives +.Dv SIGINFO +(see the +.Sy status +argument for +.Xr stty 1 ) +signal, +a space-separated list of processes still being waited on is printed +to the standard error output. .Sh EXIT STATUS The .Nm @@ -148,6 +160,7 @@ $ echo $? .Xr kill 1 , .Xr pkill 1 , .Xr ps 1 , +.Xr stty 1 , .Xr wait 1 , .Xr kqueue 2 .Sh NOTES diff --git a/bin/pwait/pwait.c b/bin/pwait/pwait.c index 34aa2b8f53ec..a478111e1137 100644 --- a/bin/pwait/pwait.c +++ b/bin/pwait/pwait.c @@ -85,7 +85,7 @@ main(int argc, char *argv[]) size_t sz; long pid; pid_t mypid; - int i, kq, n, ndone, nleft, notes, opt, pid_max, ret, status; + int i, kq, n, ndone, nev, nleft, notes, opt, pid_max, ret, status; bool oflag, pflag, rflag, tflag, verbose; oflag = false; @@ -163,10 +163,10 @@ main(int argc, char *argv[]) if (sysctlbyname("kern.pid_max", &pid_max, &sz, NULL, 0) != 0) { pid_max = 99999; } - if ((e = malloc((argc + tflag) * sizeof(*e))) == NULL) { + if ((e = malloc((argc + 1 + tflag) * sizeof(*e))) == NULL) { err(EX_OSERR, "malloc"); } - ndone = nleft = 0; + ndone = nev = nleft = 0; mypid = getpid(); notes = rflag ? NOTE_REAP : NOTE_EXIT; if (verbose) @@ -206,18 +206,28 @@ main(int argc, char *argv[]) ndone++; } else { nleft++; + nev++; } } + /* + * Detect SIGINFO so we can print a status. + */ + EV_SET(e + nev, SIGINFO, EVFILT_SIGNAL, EV_ADD, 0, 0, NULL); + if (kevent(kq, e + nev, 1, NULL, 0, NULL) == -1) { + err(EX_OSERR, "kevent"); + } + nev++; if ((ndone == 0 || !oflag) && nleft > 0 && tflag) { /* * Explicitly detect SIGALRM so that an exit status of 124 * can be returned rather than 142. */ - EV_SET(e + nleft, SIGALRM, EVFILT_SIGNAL, EV_ADD, 0, 0, NULL); - if (kevent(kq, e + nleft, 1, NULL, 0, NULL) == -1) { + EV_SET(e + nev, SIGALRM, EVFILT_SIGNAL, EV_ADD, 0, 0, NULL); + if (kevent(kq, e + nev, 1, NULL, 0, NULL) == -1) { err(EX_OSERR, "kevent"); } + nev++; /* Ignore SIGALRM to not interrupt kevent(2). */ signal(SIGALRM, SIG_IGN); if (setitimer(ITIMER_REAL, &itv, NULL) == -1) { @@ -225,13 +235,25 @@ main(int argc, char *argv[]) } } ret = EX_OK; + setvbuf(stderr, NULL, _IOLBF, 0); while ((ndone == 0 || !oflag) && ret == EX_OK && nleft > 0) { - n = kevent(kq, NULL, 0, e, nleft + tflag, NULL); + n = kevent(kq, NULL, 0, e, nev, NULL); if (n == -1) { err(EX_OSERR, "kevent"); } for (i = 0; i < n; i++) { - if (e[i].filter == EVFILT_SIGNAL) { + if (e[i].filter == EVFILT_SIGNAL && + e[i].ident == SIGINFO) { + p = RB_MIN(pidtree, &pids); + fprintf(stderr, "%d", p->pid); + while ((p = RB_NEXT(pidtree, &pids, p)) != NULL) { + fprintf(stderr, " %d", p->pid); + } + fprintf(stderr, "\n"); + continue; + } + if (e[i].filter == EVFILT_SIGNAL && + e[i].ident == SIGALRM) { if (verbose) { printf("timeout\n"); }