27 How Can I Exit from C-Kermit without Hanging Up?
Many people want to be able to make a dialout connection with UNIX
C-Kermit, but then use some other software on the connection that C-Kermit
made. For example, they want to use C-Kermit as their SLIP or PPP dialer. But
they quickly find that when they exit from C-Kermit, that the connection is
gone before they can start the other application.
It is a fundamental property of UNIX (and VMS, and Windows 95 and NT, and
most other modern operating systems) that when a process exits, then every file
that was opened by that process is automatically closed by the operating
system. In most cases, closing a terminal device (such as a dialout serial
port) hangs up the modem (by turning off the DTR signal). There is nothing the
process can do about it.
However, many workarounds are possible. Here are just a few:
- If your C-Kermit version supports the REDIRECT command, use it to start
the desired application (e.g. "redirect pppd"). The REDIRECT command runs
the given application with its standard input and output redirected to the
communications channel opened by C-Kermit's most recent SET LINE or SET HOST
command.
- Tell C-Kermit to SET MODEM HANGUP-METHOD RS232, and then configure your
modem to ignore DTR (not recommended). "Using C-Kermit", 2nd Ed., p.86.
- When opening the device first from another application, feed the file
descriptor for the device to C-Kermit using the "-l" (lowercase letter L)
command-line option followed by the numeric file descriptor, e.g. "kermit
-l 6". Then Kermit will not attempt to open the device, nor to change its
characteristics, nor to close it when done, and when Kermit exits, it will
still be available to the invoking process. "Using C-Kermit", 2nd Ed.,
p.469.
- When opening the device with C-Kermit, find out the file descriptor of
the open device (it is given by C-Kermit's \v(ttyfd) variable) and then run
("!") your other program from the C-Kermit prompt, feeding it the file
descriptor, e.g. through shell redirection or a command line option (the
method depends on the other program, the capabilities of the shell, etc).
"Using C-Kermit", 2nd Ed., p.356
- In UNIX, after Kermit makes the connection, type "show comm" to find out
the filename of the lock file. Then suspend Kermit, delete the lock file,
then start the other program and tell it to open the same tty device.
Update: C-Kermit
8.0.212 (as of Dev.21 of 5 Oct 2006) attempts to address this problem
at least for Linux-like platforms; if you SET EXIT HANGUP OFF, C-Kermit will
ask the OS to leave DTR signal on when it exits or when you close the port
device.
Kermit FAQ / Columbia University / kermit@kermitproject.org