如何在分叉进程之间共享相同的变量?或者,我是否需要写入父文件中的文件,然后在文件存在后读取保存到子文件中的值? $ something似乎永远不会在此设置,所以它只是在睡眠中循环
my $something = -1;
&doit();
sub doit
{
my $pid = fork();
if ($pid == 0)
{
while ($something == -1)
{
print "sleep 1\n";
sleep 1;
}
&function2();
}
else
{
print "parent start\n";
sleep 2;
$something = 1;
print "parent end: $something\n";
}
}
sub function2 {
print "END\n";
}
答案 0 :(得分:9)
共享文件描述符(有时是对这些描述符的锁定),而其他所有内容都被复制。
另请参阅perldoc perlipc
中的Bidirectional Communication with Yourself。
更新:第二个想法,你想要这样的东西吗?
#!/usr/bin/perl
use strict;
use warnings;
my $pid = fork;
die "Cannot fork: $!" unless defined $pid;
if ($pid == 0) {
print "Child start\n";
my $end;
local $SIG{HUP} = sub { $end = 1 };
until ($end) {
print "Sleep 1\n";
sleep 1;
}
function2();
}
else {
print "Parent start\n";
sleep 5;
kill HUP => $pid;
waitpid($pid, 0);
}
sub function2 {
print "END\n";
}
输出:
C:\Temp> w
Parent start
Child start
Sleep 1
Sleep 1
Sleep 1
Sleep 1
Sleep 1
END
答案 1 :(得分:6)
变量通常不在进程之间共享,如果要通信2个进程,最好使用管道或共享内存或任何其他IPC。
答案 2 :(得分:1)
如果你真的想使用一个表面看起来像对变量的读/写访问权限的接口在多个进程之间共享状态,你可能需要查看IPC::Shareable
。
答案 3 :(得分:0)
我相信你想要使用线程;进程不是线程(尽管在某个时间点,Linux线程是使用与其父进程共享内存的特殊类型的进程实现的。)
答案 4 :(得分:0)