>

새로운 프로세스로 proc을 실행하려고합니다. main 함수에서 proc1 및 proc2를 호출하려고하지만 각각 새 프로세스 (또는 하위 프로세스)와 별도로 실행하고 완료 될 때까지 기다려야합니다

   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"
    }

exec를 사용해 보았지만 작동하지 않았습니다. 인터넷 검색을 시도했지만 해결책을 찾지 못했습니다

어떻게 실행할 수 있습니까?

정말 감사합니다!


  • 답변 # 1

    가장 간단한 메커니즘은 프로 시저를 별도의 파일에 넣는 것입니다 (예 : 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]
    
    
    <시간> 그러나 위의 방법이 가장 강력한 메커니즘은 아닙니다. 특히, 절차에 버그가 있으면 상황이 상당히 나빠질 것입니다. 다음은 프로 시저를 return 로 변경 한 경우 매우 잘 작동하는보다 강력한 메커니즘입니다.   puts 대신 결과 ing :

    캘리 쪽 :

    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
    }
    
    

    정규 stdout 전송  동시에 또는 하위 프로세스가 호출자의 stdin 에 액세스하도록 허용 , 명령 및 제어 채널을 표준 파이프가 아닌 다른 채널로 옮기려면 더 많은 작업이 필요하며 위의 내용은 많은 것들에 충분합니다.

  • 이전 php - 필드가있는 SQL 조인 광고는 필드를 열로 표시합니다
  • 다음 TFS 서버에서 MSBuild의 PublishProfile 매개 변수 관련 문제점