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: Sending signals to a subprocess


On 10/20/2010 1:09 AM, Andy Koppe wrote:
On 20 October 2010 04:17, Ken Brown<kbrown@cornell.edu> wrote:
Emacs creates a subprocess that runs an interactive bash shell.  Emacs wants
to get the PGID of the foreground process group associated to the tty of
this shell, and it does this on Linux via TIOCGPGRP (or equally well
tcgetpgrp).  I think it uses the file descriptor of the master of the pty
for this purpose.  If you (or some other programmer reading this) could give
me the code for setting all this up, I could play with it and try to figure
out why I'm seeing a difference between Linux and Cygwin here.  I just don't
know how to create a subprocess, give it a terminal, etc.

Here's a test along those lines that does show a difference between Linux and Cygwin:

#include<stdio.h>
#include<pty.h>

int main(void)
{
   int pid, fd;
   pid = forkpty(&fd, 0, 0, 0);
   if (!pid)
     sleep(2);
   else {
     sleep(1);
     printf("pid=%i fd=%i pgrp=%i\n", pid, fd, tcgetpgrp(fd));
   }
}

Thanks, Andy. I had no idea how to do this.


On Linux, where it requires -lutil to link, this gives:

pid=13308 fd=3 tcgetpgrp(fd)=13308

I can confirm this on my Linux system. I mention this because apparently tcgetpgrp isn't the same on all Linux systems. See below.


On Cygwin:

pid=268 fd=3 tcgetpgrp(fd)=0

Corinna made tcgetpgrp return 0 instead of -1 in some circumstances (see http://www.cygwin.com/ml/cygwin-patches/2009-q4/msg00045.html) because she saw Linux doing that. But when I run Corinna's test on my Linux system, I get -1 where she got 0. So not all Linuxes agree on what tcgetpgrp should do.


Neither of those looks POSIX-compliant to me, because tcgetpgrp should
return -1 since fd 3 isn't the controlling terminal of the calling
process, but the Linux behaviour is rather useful. Perhaps they
decided to apply that restriction only to the slave side?

Ken


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


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