kai@sp1.csrd.uiuc.edu (Kuck And Associates) (08/07/90)
I've written in Perl the equivalent of the C code I have used
in a daemon to detach from the control terminal, but it doesn't
seem to work (on a BSD Unix host).
Can anyone tell me what I'm doing wrong in this example?
Patrick Wolfe (pat@kai.com, kailand!pat)
System Programmer/Operations Manager, Kuck & Associates
"Any opinions expressed are my own, not my employers's.
Please don't call my boss and complain ... again."
-- cut here -- cut here -- cut here -- cut here --
#!/usr/local/bin/perl3
$logfile = "/dev/null";
do detach ();
sleep (600);
exit (0);
# behave like a proper daemon - set our own process group and detach from our control terminal
sub detach
{
chdir ("/");
open (STDIN, "< /dev/null") || die "cannot redirect stdin from /dev/null: $!";
open (STDOUT, "> $logfile") || die "cannot redirect stdout to $logfile: $!";
open (STDERR, ">&STDOUT") || die "cannot dup stderr to stdout: $!";
select (STDERR); $| = 1;
select (STDOUT); $| = 1;
if (open (TTY, "> /dev/tty")) {
do "sys/ioctl.h"; # probably /usr/local/lib/perl/sys/ioctl.h
if ($@ ne "") {
print STDERR "check_uptime: cannot \"do sys/ioctl.h\": $@\n";
print STDERR "you probably need to run \"makelib sys/ioctl.h\"\n";
exit (1);
}
ioctl (TTY, $TIOCNOTTY, 0);
close (TTY);
}
setpgrp (0, $$);
}lwall@jpl-devvax.JPL.NASA.GOV (Larry Wall) (08/07/90)
In article <1990Aug6.190050.2706@csrd.uiuc.edu> kai@sp1.csrd.uiuc.edu (Kuck And Associates) writes:
: I've written in Perl the equivalent of the C code I have used
: in a daemon to detach from the control terminal, but it doesn't
: seem to work (on a BSD Unix host).
:
: Can anyone tell me what I'm doing wrong in this example?
: do "sys/ioctl.h"; # probably /usr/local/lib/perl/sys/ioctl.h
: if ($@ ne "") {
: print STDERR "check_uptime: cannot \"do sys/ioctl.h\": $@\n";
: print STDERR "you probably need to run \"makelib sys/ioctl.h\"\n";
: exit (1);
: }
: ioctl (TTY, $TIOCNOTTY, 0);
That should probably be &TIOCNOTTY.
After the next patch, you'll want to turn those lines into
require "sys/ioctl.ph";
ioctl(TTY, &TIOCNOTTY, 0);
Note the .ph extension change also.
Larry