スレーブ インタープリターで tclhttpd を実行しようとしていますが、tclkit 内で実行するように少し変更しています。以下のコードは「実行」されます ( http://localhost:8015をヒットできます) が、「サーバーが返されず、[vwait forever] に入る」ため、下部の puts 行には到達しません。しかし、「$httpd eval $cmd」の行に「after 0」を追加するなど、「after 0 トリック」を試すと、サーバーはまったく実行されないため、「エラーは bgerror で処理する必要がある」と推測します。
ただし、bgerror の使用方法の良い例を見つけることができません。さらに、私の調査によると、現在は "interp bgerror" を使用するのが慣習になっています。http://www2.tcl.tk/_/gsearch?S=bgerrorによって返される最初の 2 つの例を参照してください。最初のリンクには「bgerror を使用するための便利なトリックと例を記入してください」という言い回しが含まれていますが、適用方法を識別できるサンプルはなく、2 番目のリンクは「これがどのように使用されることになっているかの例に興味があります」と結論付けています。
package require starkit
starkit::startup
set httpd_args [list]
set httpd [interp create]
$httpd eval "set argc [llength $httpd_args]"
set cmdargv "set argv [list $httpd_args ]"
$httpd eval "set topdir $starkit::topdir"
$httpd eval $cmdargv
set cmd [list source [file join $starkit::topdir bin/httpd.tcl]]
$httpd eval $cmd
puts "if seeing this controlled has returned"