-lcmd provides the pids builtin
see pids --man

On Tue, 25 Jun 2013 23:15:59 +0200 Cyrille Lefevre wrote:
> Le 24/06/2013 16:31, David Korn a écrit :
> > cc:  [email protected]
> > Subject: Re: Re: [ast-users] Trouble with getting the child process pid 
> > ("$!") in  ksh93 ...
> > --------
> >
> >> On Mon, Oct 23, 2006 at 10:23 PM, David Korn <[email protected]> wrote:
> >>> cc:  [email protected]
> >>> Subject: Re: [ast-users] Trouble with getting the child process pid 
> >>> ("$!") in
> >>   ksh93 ...
> >>> --------
> >>>
> >>>> While working on another project I hit a problem with obtaining the
> >>>> process ID of the current child process (I'd like to "renice" it to a
> >>>> lower priority (however in a different way than the "bgnice" option
> >>>> does)).
> >>>>
> >>>> Example:
> >>>> -- snip --
> >>>> $ (ksh93 -c 'px() { echo "p1=${$} p2=${!}" ; } ; px ; ( px ) &')
> >>>> p1=27961 p2=
> >>>> p1=27961 p2=
> >>>> -- snip --
> >>>> The output of $$ is expected... but how can I get the process ID of the
> >>>> current child process ?
> >>>>
> >>>> For comparisation "bash" returns the current background process ID in $!
> >>>> _within_ the child:
> >>>> -- snip --
> >>>> $ (bash -c 'px() { echo "p1=${$} p2=${!}" ; } ; px ; ( px ) &')
> >>>> p1=27964 p2=
> >>>> p1=27964 p2=27965
> >>>> -- snip --
> >>>>
> >>>> I am not sure whether this behaviour is POSIX conformant... but it is
> >>>> IMO usefull...
> >>>>
> >>>> ... any ideas/suggestions/rants/etc. welcome...
> >>>
> >>> The way $! is defined is that it is the pid of the last background
> >>> process or coprocess.  When a subshell starts, there is no
> >>> most recent background job so there is not pid.
> >>>
> >>> However, the standard isn't clear as to what the value of $! is
> >>> when there was no background jobs executed.  Perhaps initializing
> >>> it to the current pid makes sense.
> >>>
> >>> I will post this onto the austin group list and see whether
> >>> anyone thinks that it would violate the standard.
> >>
> >> ping! ... has there been any feedback yet ? I just stumbled over the
> >> issue (again) while trying to craft a realtime signal test which nests
> >> child processes like a "Matryoshka doll" (e.g. see
> >> http://en.wikipedia.org/wiki/Matryoshka_doll) ...
> >> ... the issue I ran into is that $$ always refers to the base shell
> >> process and AFAIK there no easy way to pass the pid of the current
> >> shell child process to it's child processes...
> >>
> >
> > I have it on my list.  I am not sure which shell is correct.
> >
> > I ran strace of bash on
> > ======cut here======
> >     px() { echo "p1=${$} p2=${!}" ; } ;  ( px ) &
> > ======cut here======
> >
> > 14896 execve("/usr/common/bin/bash", ["bash", "./bug228"], [/* 75 vars */]) 
> > = 0
> > ...
> > 14896 clone(child_stack=0, 
> > flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, 
> > child_tidptr=0x7f79be0bc9d0) = 14897
> > ...
> > 14897 write(1, "p1=14896 p2=\n", 13)    = 13
> > 14897 exit_group(0)                     = ?
> >
> >
> > So how can $! be 14896 in process 14897 since 14896 is a parent of 14897,
> > not a child and $! is supposed to be a child process.
> >
> > This one is still on my bug list as unresolved.
> >
> > David Korn
> > [email protected]

> Hi,

> even if the idea seems good, I'm not sure about portability ?!

> imagine the following situation :

> some process &
> (sleep 60; kill $!) &
> wait

> $! should point to "some process" and not the current process inside ()

> IMHO, it is much better to have a new shell variable such as $= or 
> whatever (.sh.child)

> AFAIK, the better and actual way to get the current pid inside a child is :

> ksh -c '(pid=$(exec ksh -c "echo \$PPID"); echo $pid) & wait; echo $!'

> I am wrong ?

> Regards,

> Cyrille Lefevre
> -- 
> mailto:[email protected]

> _______________________________________________
> ast-users mailing list
> [email protected]
> http://lists.research.att.com/mailman/listinfo/ast-users

_______________________________________________
ast-users mailing list
[email protected]
http://lists.research.att.com/mailman/listinfo/ast-users

Reply via email to