2017-08-06 12 views
1

新しいプロセスでprocを実行しようとしています main関数からproc1とproc2を呼び出そうとしていますが、それぞれ新しいプロセス(またはサブプロセス)それはTCL:同じファイルから新しいプロセスでprocを実行する

proc main { var } { 
     puts "main function with var: $var" 
     #call proc1 with new process 
     exec proc1 1 
     #wait till proc1 finish 
     #call proc2 with new process 
     exec proc2 2 
     #wait till proc2 finish 
     puts "Finished" 
    } 

    proc proc1 { var1 } { 
     puts "proc1 function with var: $var1" 
    } 

    proc proc2 { var2 } { 
     puts "proc2 function with var: $var2" 
    } 

を終えるまでしても、私は幹部を使用してみましたが、それは私がそれをグーグルで試してみましたが、私はそれを実行することができますどのように解決

を見つけるために、成功しなかった? を動作しませんでした待ちますか

ありがとうございます!

+1

別々のプロセスが必要な場合は、それらのprocsを別々のファイルに保存し、 'tclsh'プロセスでそれらを呼び出すプロセス – Dinesh

+0

スレッドを使用することを検討してください。彼らは使いやすくなっています。 –

答えて

0

最も簡単なメカニズムは、ファイルの最後で余分なコードの以下のビットを別のファイル(例えば、myprocs.tcl)の手順を置くことです:

# Take a command from stdin, evaluate it, and write result to stdout 
puts [eval [read stdin]] 

次に、あなたが使用して、これらのプロシージャを呼び出します次のヘルパー:上記

proc runproc {procname args} { 
    exec [info nameofexecutable] myprocs.tcl << [list $procname {*}$args] 2>@stderr 
} 

# Demonstrating 
set result [runproc proc1 1] 

しかし最も堅牢なメカニズムではありません。特に、あなたの手続きにバグがあると、物事はかなりうんざりになります。

呼び出し先側:

set cmd [read stdin] 
catch $cmd msg opts 
puts [list $msg $opts] 
exit 

発信者側:

proc runproc {procname args} { 
    set cmd [list $procname {*}$args] 
    set pair [exec [info nameofexecutable] myprocs.tcl << $cmd 2>@stderr] 
    lassign $pair msg opts 
    return -options $opts $msg 
} 

転送ここでは非常によく、あなたがそれらをINGのreturnその結果の代わりputsにあなたの手順を変更する提供作品より堅牢なメカニズムです通常はstdoutを横断するか、またはサブプロセスが呼び出し側のstdinにアクセスできるようにするには、コマンドと制御チャネルを別のタンデアパイプ、そして上記は多くの事に十分です。

関連する問題