|
Mit freundlicher Unterstützung von:
|
On Thu, Sep 25, 1997 at 11:37:00AM +0200, Guenther Leber wrote:
> Ich schreib gerade einen forkenden Netzwerkserver. Brav wie es sich
> gehört, öffne ich auch /dev/tty und mache anschließend ein
> ioctl(ttyfd, TIOCNOTTY, 0) um den Prozeß vom Controlling Terminal
> abzuhängen. Irgendwie war ich der Meinung, daß dann Signale, die vom
> Terminal (i.e. User, der Control-C drückt) generiert werden, dann nicht
> an den Prozeß weitergegeben würden. Soviel zur Theorie.
>
> Hier die Praxis auf einem NEXT (68k und LANGSAM) mit XEXTSTEP 3.3.:
> Ich starte das Programm (im Vordergrund; könnte das eine Erklärung
> sein?) und wenn ich Control-C drücke, dann kommt das Signal durch
>
> Meine Frage: Did I miss anything in my theoretical analysis
Offensichtlich, denn unter Linux ist es das gleiche. Nach dem ioctl
gibt es zwar kein controlling tty mehr (Du kannst "/dev/tty" nicht mehr
öffnen), aber Signale erreichen den Prozess sehr wohl noch. Warum das so
ist, verstehe ich im Moment nicht. Du könntest versuchen, mit setsid
oder setpgid explizit eine neue Process Group zu eröffnen.
Kleines Testprogramm für obige Situation:
---%<------%<------%<------%<------%<------%<------%<------%<---
#include <sys/ioctl.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
char *cmnd;
int main(int argc, char **argv) {
int fd;
cmnd = argv[0];
if ((fd = open("/dev/tty", O_RDONLY)) == -1) {
fprintf(stderr, "%s: cannot open %s: %s\n",
cmnd, "/dev/tty", strerror(errno));
exit(1);
}
if (ioctl(fd, TIOCNOTTY, 0) == -1) {
fprintf(stderr, "%s: ioctl (TIOCNOTTY) failed: %s\n",
cmnd, "/dev/tty", strerror(errno));
exit(1);
}
close(fd);
/* try to reopen tty (should fail) */
if ((fd = open("/dev/tty", O_RDONLY)) == -1) {
fprintf(stderr, "%s: cannot open %s (as expected): %s\n",
cmnd, "/dev/tty", strerror(errno));
} else {
fprintf(stderr, "%s: still have a controlling tty!\n",
cmnd);
close(fd);
}
sleep (10);
return 0;
}
---%<------%<------%<------%<------%<------%<------%<------%<---
hp
--
_ | Peter J. Holzer | If I were God, or better yet
|_|_) | Sysadmin WSR | Linus, I would ...
| | | hjp@wsr.ac.at | -- Bill Davidsen
__/ | http://wsrx.wsr.ac.at/~hjp/ | (davidsen@tmr.com)
|
the choice of a gnu generation linux user group austria; |
Suche
|
Letzte Änderung:
webmaster@luga.at 25. Juni |