Wie kann der Master pty erkennen, ob ein Slave-tty verlassen hat?
Frage
Ich verwende BSD-pty / tty Paare läuft eine Unterschale zu implementieren. Wenn der Benutzer die Unterschale austritt, wie erkenne ich in dem Master-Prozess, dass dies geschehen ist? Ich bin mit select (nfds & read_fds, NULL, NULL, & timeout); mit der Master-Descriptor pty-Datei in dem read_fds auf der Master-Seite eingestellt.
Lösung 2
Ich habe die Antwort auf diese Frage durch die Untersuchung der telnetd Quellcode in dem GNU inetutils Paket gefunden. In telnetd, verwenden sie eine SIGCHLD Handler wie folgt aus:
int status;
pid_t pid = waitpid((pid_t)-1, &status, WNOHANG);
syslog (LOG_INFO, "child process %ld exited: %d",
(long) pid, WEXITSTATUS(status));
// do cleanup code
Andere Tipps
Die Subshell werden typischerweise durch eine fork()
irgendeine Art geschaffen. Die PID des Kindes an den Master zurückgeführt wird, die (mit waitpid()
, vielleicht) überprüfen können, ob es noch läuft.