Yes, there is task group concept and support by kill API directly:
https://pubs.opengroup.org/onlinepubs/009604499/functions/kill.html

If *pid* is negative, but not -1, *sig* shall be sent to all processes
(excluding an unspecified set of system processes) whose process group ID
is equal to the absolute value of *pid*, and for which the process has
permission to send a signal.
https://en.wikipedia.org/wiki/Process_group
But nuttx doesn't support task sesion/group yet, so the simple solution is
extend kill command instead.

On Mon, Jan 16, 2023 at 12:31 PM Gregory Nutt <spudan...@gmail.com> wrote:

> That wouldn’t be consistent with how Linux works, would it?  I'm not an
> expert on this topic and I am sure that other people on this list know more
> about this than me.  My understanding is that Linux has "session leaders"
> which correspond to login sessions.  For each terminal opened by the
> session leader, a "controlling terminal" is created that has at least two
> process groups:  a foreground and a background process group which may
> consist of several processes.  Multiple process groups can be managed with
> interfaces like setpgid().  Sessions can be managed with interfaces like
> setsid().
>
>
> The process groups get killed when the terminal is closed (unless it is
> daimonized).  The kill command also supports syntax to kill process
> groups.  Killing all processes or killing of all child processes is not
> supported AFAIK.
>
>
> Sent from Mail <https://go.microsoft.com/fwlink/?LinkId=550986> for
> Windows
>
>
>
> *From: *Xiang Xiao <xiaoxiang781...@gmail.com>
> *Sent: *Sunday, January 15, 2023 9:54 PM
> *To: *dev@nuttx.apache.org
> *Subject: *Re: How to automatically kill all children threads when the main
> thread die
>
>
>
> If CONFIG_SIG_DEFAULT, the kernel will terminate all child pthreads, but
>
> not child tasks.
>
> We can extend kill to support -P flag like pkill:
>
> https://linux.die.net/man/1/pkill
>
> -P ppid,...
>
> Only match processes whose parent process ID is listed.
>
>
>
> On Mon, Jan 16, 2023 at 10:14 AM Gregory Nutt <spudan...@gmail.com> wrote:
>
>
>
> > he
>
> >
>
> > > Ooops.  No,  you a re asking about tasks, not threads.  That is easier.
>
> > > The answer is no:  One task exiting has not effect at all any other
>
> > tasks.
>
> > >
>
> >
>
> > The question is confusing because it asks about killing other threads
> (aka
>
> > pthreads) when the main (task) exits. But the example shows only tasks
>
> > (main threads).
>
> >
>
> > https://cwiki.apache.org/confluence/display/NUTTX/Tasks+vs.+Threads+FAQ
>
> >
>
> >
>
> > >
>
> > >> On Sun, Jan 15, 2023 at 5:25 PM Alan C. Assis <acas...@gmail.com>
>
> > wrote:
>
> > >>
>
> > >>> Dear NuttXers,
>
> > >>>
>
> > >>> I want to know if there are some hidden configuration that forces all
>
> > >>> children to die when the father task die.
>
> > >>>
>
> > >>> Currently only teh main task dies:
>
> > >>>
>
> > >>> nsh> family &
>
> > >>>
>
> > >>> nsh> ps
>
> > >>>   PID GROUP PRI POLICY   TYPE    NPX STATE    EVENT     SIGMASK
> STACK
>
> > >>> COMMAND
>
> > >>>   ...
>
> > >>>    27    27 100 RR       Task    --- Waiting  Signal    00000000
> 004032
>
> > >>> family
>
> > >>>    28    28 100 RR       Task    --- Waiting  Semaphore 00000000
>
> > >>> 004032 child1_daemon
>
> > >>>    29    29 100 RR       Task    --- Waiting  Signal    00000000
>
> > >>> 004032 child2_daemon
>
> > >>>    30    30 100 RR       Task    --- Waiting  Signal    00000000
>
> > >>> 001984 child3_daemon
>
> > >>>
>
> > >>> nsh> kill 27
>
> > >>> nsh> ps
>
> > >>>   PID GROUP PRI POLICY   TYPE    NPX STATE    EVENT     SIGMASK
> STACK
>
> > >>> COMMAND
>
> > >>>   ...
>
> > >>>    28    28 100 RR       Task    --- Waiting  Signal    00000000
>
> > >>> 004032 child1_daemon
>
> > >>>    29    29 100 RR       Task    --- Waiting  Signal    00000000
>
> > >>> 004032 child2_daemon
>
> > >>>    30    30 100 RR       Task    --- Waiting  Signal    00000000
>
> > >>> 001984 child3_daemon
>
> > >>>
>
> > >>> I could setup a signal handling to handle the kill signal in the main
>
> > >>> task and use it to change the value of some conditional variable that
>
> > >>> maintain the threads loop of each child running, this is is an
> option,
>
> > >>> but maybe there are better option.
>
> > >>>
>
> > >>> Please let me know how you are solving this issue.
>
> > >>>
>
> > >>> BR,
>
> > >>>
>
> > >>> Alan
>
> > >>>
>
> > >>
>
> >
>

Reply via email to