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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top