1

这是一个例子:

bash-4.2$ export i=0
bash-4.2$ while :; do let i=i+1; done &
[1] 29668
bash-4.2$ echo $i
0
bash-4.2$ kill %1
bash-4.2$ exit

在这里,我开始的工作不断增加$i,但只是作为一个局部变量。我知道在 bash 中没有指针或引用之类的东西,所以我的问题是如何做到这一点?

如果有可能,那么这意味着可以同时在多个线程中访问和写入一个变量,这就是我想要实现的。有没有办法防止关键部分(在 shell/bash 中)出现内存读/写问题?

4

3 回答 3

2

Bash 4 支持协同进程,这只是一种使用双向管道的幕后方法。

于 2012-06-13T15:51:05.947 回答
1

Bash 没有线程,进程也不共享内存。子shell 仍然是不同的进程——它们从父进程继承状态,但没有与它们共享的数据。

父进程可以从子外壳或其他进程读取输出,然后更改自己的状态,但子进程无法直接这样做。

于 2012-06-13T15:28:20.960 回答
0

首先,这些不是线程,它们是进程。没有直接的方法可以让孩子更改父进程的变量(我知道的唯一方法是将 C 程序附加为调试器)。

最好使用管道(可能是命名管道)将数据传回给调用者。

于 2012-06-13T15:31:43.327 回答