Cygwin Subprocesses on XEmacs

Vin Shelton
Wed Jan 28 13:20:00 GMT 2015

Hi, Corinna et al,

On Wed, Jan 28, 2015 at 4:53 AM, Corinna Vinschen wrote:
> On Jan 27 23:05, Vin Shelton wrote:
>> I spent some time debugging M-x shell in XEmacs on 32-bit Cygwin.
>> Here's what I found out.
>> In the child after fork() but before exec(), the setsid() call in
>> disconnect_controlling_terminal() is causing the subprocess not to
>> function after it gets spawned.
> Can you define "not function" a bit more detailed?  Does no process work
> at all, or do only processes requiring a tty not work?  For instance,
> does something like an "echo foo > bar" still work?

M-x shell is specifically designed to spawn an interactive process
like a shell.  The bash subprocess starts, but it accepts no input.
Here is the output of ps for that process:

S    1740     252    1740        268  pty1    1003 08:10:54 /usr/bin/bash

I think it's only commands requiring a tty, but that's the whole point
of M-x shell mode.  There is a separate command - M-x shell-command -
which is designed to run and capture the output of individual commands
like "ls" or "echo".  That works fine.

BTW, if I try to spawn gdb as a shell, the behavior is similar, but
this time the process looks like this:

     3328    3248    3328       3408  pty2    1003 08:15:18
/usr/bin/gdb <defunct>


>> Thanks for any insight you can offer.
> Hmm, not off the top of my head.  Is there a chance that you could
> provide a simple, self contained testcase to reproduce the setsid
> behaviour?  I think I have to debug that.

You mean a simpler test case than XEmacs?  That seems like a low bar.  :-)

I'll try.  Meanwhile, I've been looking at the emacs code (which in
this case is simpler) to see if I can figure out how it is that M-x
shell works there.

Thank you!

  - Vin

More information about the Cygwin-apps mailing list