2013-02-20 95 views
1

我試圖在主進程和子進程之間傳遞信息(學習如何在進程中工作)我需要從子進程獲取信息,在這種情況下,g_start的值。這是我在網上看到的處理方式,如果有更好的方法,請讓我知道!進程和子進程之間的DCL信息

主要文件包含

$ define/job/nolog g_start false 
$ g_test == 6 
$ spawn @test.com 
$ if f$trnlnm(g_start) .eqs. true 
$ then 

文件test.com包含:

$ If g_test .nes. 5 
$ then 
$ define/job g_start true 
$ endif 
$ logout 

當運行主文件g_test沒有找到什麼我做錯了,我不是讓數據傳遞在主進程和子進程之間來回切換。

+2

你大概意思thave周圍的邏輯名稱引號:'F $ trnlnm( 「g_start」)'。 – HABO 2013-02-20 18:29:59

回答

1

DCL符號(g_test)不在進程之間共享。使用共享的邏輯名稱,例如在工作表中,將工作。

更高級的通信,例如傳遞消息,可以使用郵箱完成。

編輯:爲了澄清,spawn/symbols將導致在創建時將符號複製到子進程,但會創建一組新的符號。父進程然後進入其快樂的方式,任何進程中的任何符號更新都是獨立進行的。

+0

那麼$ define/job g_start true不會設置共享邏輯名稱? VMS/DCL完全新版對不起 – user1943219 2013-02-20 16:33:18

+0

@ user1943219 - 是的,'define/job'設置共享邏輯的值。作業中的任何進程(即進程樹)都可以在作業表中創建/讀取/更新/刪除(CRUD)邏輯。由於該表是共享的,所有進程都會看到任何更改。 – HABO 2013-02-20 18:27:34

0

我能解決這個問題,我猜猜我是錯的。

文件1:

$ define/job g_start false 
$ g_test == 6 
$ spawn @test.com 
$ result = f$trnlnm("g_start") 
$ write sys$output ''result' 
$ if (''result' .eq. "true") 
$ then 

文件2:

$ If g_test .nes. 5 
$ then 
$ define/job g_start true 
$ endif 
$ logout 
+0

拿出'spawn'確實簡化了一些事情。另一個錯字? – HABO 2013-02-20 18:29:09

+0

是的,當從記事本複製/粘貼時,我錯過了spawn命令,它在工作副本中。以上更新 – user1943219 2013-02-21 15:02:07