1

サブシェルの実行を実装するために、BSD スタイルの pty/tty ペアを使用しています。ユーザーがサブ シェルを終了するとき、これが発生したことをマスター プロセスで検出するにはどうすればよいですか? select(nfds, &read_fds, NULL, NULL, &timeout); を使用しています。マスター側の read_fds にマスター pty ファイル記述子を設定します。

4

2 に答える 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 に答える