2013-02-20 60 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