サブシェルの実行を実装するために、BSD スタイルの pty/tty ペアを使用しています。ユーザーがサブ シェルを終了するとき、これが発生したことをマスター プロセスで検出するにはどうすればよいですか? select(nfds, &read_fds, NULL, NULL, &timeout); を使用しています。マスター側の read_fds にマスター pty ファイル記述子を設定します。
2 に答える
3
サブシェルは通常fork()
、何らかの方法で作成されます。子の PID がマスターに返され、waitpid()
まだ実行されているかどうかを (おそらく で) チェックできます。
于 2008-11-05T06:07:42.023 に答える
2
GNU inetutils パッケージにある telnetd ソース コードを調べて、この質問に対する答えを見つけました。telnetd では、次のような SIGCHLD ハンドラを使用します。
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
于 2008-11-06T01:45:07.997 に答える