zsh-users
 help / color / mirror / code / Atom feed
From: Bart Schaefer <schaefer@brasslantern.com>
To: zsh-users@zsh.org
Subject: Re: How to propagate SIGTERM to the foreground job, if any?
Date: Fri, 19 Apr 2024 13:06:12 -0700	[thread overview]
Message-ID: <CAH+w=7atm3k6WwkhuywjPQC0eOB7W+3VvjWjR6jMk-JVExDpZQ@mail.gmail.com> (raw)
In-Reply-To: <20240419190027.GA109916@joooj.vinc17.net>

On Fri, Apr 19, 2024 at 12:00 PM Vincent Lefevre <vincent@vinc17.net> wrote:
>
> I don't understand why you are saying that "it should be the process
> group leader for the terminal". This is not true in my case (the
> leader is some ancestor)

I don't understand how you're determining that the leader is an ancestor.

That you have job control at all implies this is an interactive shell.
When zsh starts interactively, it attaches to the TTY and makes itself
the group leader.

Subsequently, each time a foreground job is started, zsh attaches that
to the TTY and makes it a new group leader, only reclaiming the TTY
after the foreground job exits.  If it did not do this, ^Z and ^C
would not work.

The only way for an "ancestor" of the job you want to TERM to be the
group leader is if the job zsh started has subsequently forked again,
in which case zsh doesn't have any knowledge or control of the
"grandchild".

That still doesn't mean that "kill 0" from the zsh process would kill
the desired process group, I didn't actually try it.

> On 2024-04-19 11:30:35 -0700, Bart Schaefer wrote:
> >
> > It's not that $jobstates is not available, it's that the foreground
> > job isn't in the table at all.

I was misled there by trying to use INT.  The current job is reaped
before the trap runs.

> But then, why does "kill %%" work?

It doesn't.

% setopt trapsasync
% trap 'print -raC2 -- ${(kv)jobstates}' TERM
% (sleep 2 ; kill -TERM $$) & sleep 10 & sleep 3 & sleep 5
[1] 40302
[2] 40303
[3] 40305
1  running::40302=running
2  running:-:40303=running
3  running:+:40305=running
4  running::40306=running
[1]    done       ( sleep 2; kill -TERM $$; )
[3]  + done       sleep 3
%
[2]  + done       sleep 10

So in the above, job #4 would be the foreground job, but %+
(equivalent to %%) is job #3.  The foreground job has no % shortcut.
Further evidence:

% (sleep 2 ; kill -TERM $$) &! sleep 10
1  running::40317=running
% trap 'print -- ${jobstates:+SET}' TERM
% (sleep 2 ; kill -TERM $$) &! sleep 10
SET
% trap 'trap -- TERM; kill ${jobstates:+%%}' TERM
% (sleep 2 ; kill -TERM $$) &! sleep 10
kill: no current job
%


  reply	other threads:[~2024-04-19 20:07 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-19 17:17 Vincent Lefevre
2024-04-19 18:30 ` Bart Schaefer
2024-04-19 19:00   ` Vincent Lefevre
2024-04-19 20:06     ` Bart Schaefer [this message]
2024-04-19 21:32       ` Vincent Lefevre
2024-04-21  4:09         ` Bart Schaefer
2024-04-21 17:29           ` Vincent Lefevre
2024-04-21 17:43             ` Vincent Lefevre
2024-04-21 21:25               ` Bart Schaefer
2024-04-21 23:59                 ` Vincent Lefevre
2024-04-22  0:41                   ` Bart Schaefer
2024-04-23 15:17                     ` Vincent Lefevre
2024-04-23 17:32                       ` Bart Schaefer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAH+w=7atm3k6WwkhuywjPQC0eOB7W+3VvjWjR6jMk-JVExDpZQ@mail.gmail.com' \
    --to=schaefer@brasslantern.com \
    --cc=zsh-users@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).