This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Help understanding process tree


On Fri, Apr 29, 2005 at 12:26:32AM -0700, Yitzchak Scott-Thoennes wrote:
>On Thu, Apr 28, 2005 at 11:02:58AM -0400, Christopher Faylor wrote:
>> On Thu, Apr 28, 2005 at 07:28:05AM -0700, Earl Chew wrote:
>> >I'm working on a cygwin problem and have been looking at the Win32
>> >process tree structure using Process Explorer from Sysinternals:
>> >
>> >http://www.sysinternals.com/ntw2k/freeware/procexp.shtml
>> >
>> >I'd like help understanding why Process Explorer shows cygwin
>> >child processes as orphans, but win32 child processes as children.
>> >
>> >How is this so?
>> >
>> >For example, if I start bash, then start cmd /c dir, I will see:
>> >
>> >bash
>> >  bash
>> >    cmd /c dir
>> >
>> >My reading of the code is that the 2nd bash is the fork-stub that is
>> >waiting for cmd to complete.
>> >
>> >Now, if I start sleep 30, I will see:
>> >
>> >bash
>> >sleep 30
>> 
>> Right.  cmd is a non-cygwin program so it needs a cygwin stub to handle
>> being "execed".  sleep is a cygwin program and does not require any
>> hand holding.
>
>Now go back and reread the sentence where he says "I'd like help
>understanding why..." :)

exec is not a windows concept.  There is no way for one program to pass
on the pid of another program.  So, while cygwin does use windows pids,
when a process is execed, the new process is passed a handle to the original
process (to stop the original pid from being used), and the original process
exits.  Since the original process disappears, I suppose that would make
the execed process look like an orphan.

"a non-cygwin program...needs a cygwin stub to handle being execed"

If the process being execed is a pure windows process, the original process
sticks around, waiting for handshaking with the new process which indicates
that the new process knows how to deal with being execed.  Since that never
comes, the original process stays around until the new process exits and
you'll there will be no orphan.

cgf


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]