#!/usr/bin/perl
# sharetest - test shared variables across forks
use strict;
use warnings;
use IPC::Shareable;
my %buffer;
my $handle = tie %buffer, 'IPC::Shareable', undef, { destroy => 1 };
$buffer{test} = "inoangrnglkdtghnlkhnl";
$buffer{test1} = "inoangrnglkdtghnlkhnl";
$buffer{test2} = "inoangrnglkdtghnlkhnl";
$buffer{test3} = "inoangrnglkdtghnlkhnl";
$buffer{test4} = "inoangrnglkdtghnlkhnl";
$SIG{INT} = sub { die "$$ dying\n" };
my @kids;
for ( 1 .. 10 ) {
my $child;
unless ( $child = fork ) { # i'm the child
die "cannot fork: $!" unless defined $child;
squabble();
exit;
}
push @kids, $child; # in case we care about their pids
}
while (1) {
print "Buffer is $buffer{test}\n";
sleep 1;
}
die "Not reached";
sub squabble {
my $i = 0;
while (1) {
next if $buffer{test} =~ /^$$\b/o;
$handle->shlock();
$i++;
$buffer{test} = "$$ $i";
$handle->shunlock();
}
}
####
- Segmentos da memória compartilhada -
chave shmid proprietário perms bytes nattch status
0x00000000 0 root 777 102400 1
0x00000000 196609 jackal 600 393216 2 dest
0x00000000 229378 jackal 600 393216 2 dest
0x00000000 262147 jackal 600 393216 2 dest
0x00000000 294916 jackal 600 393216 2 dest
0x00000000 327685 jackal 600 393216 2 dest
0x00000000 360454 jackal 600 393216 2 dest
0x00000000 393223 jackal 600 393216 2 dest
0x00000000 425992 jackal 600 393216 2 dest
0x00000000 458761 jackal 600 393216 2 dest
0x00000000 491530 jackal 600 393216 2 dest
0x00000000 524299 jackal 600 393216 2 dest
0x00000000 557068 jackal 600 393216 2 dest
0x00000000 589837 jackal 600 393216 2 dest
0x00000000 655374 jackal 600 393216 2 dest
0x00000000 688143 jackal 600 393216 2 dest
0x00000000 1114128 jackal 600 393216 2 dest
0x00000000 1146897 jackal 600 393216 2 dest
0x00000000 851986 jackal 600 393216 2 dest
0x00000000 983059 jackal 600 393216 2 dest
0x00000000 1015828 jackal 600 393216 2 dest
0x00000000 1212437 jackal 666 65536 1
####
$buffer{test} = "inoangrnglkdtghnlkhnl";
$buffer{test1} = [ 'one', 'two' ];
$buffer{test2} = [ 'one', 'two' ];
$buffer{test3} = [ 'one', 'two' ];
$buffer{test4} = [ 'one', 'two' ];
####
- Segmentos da memória compartilhada -
chave shmid proprietário perms bytes nattch status
0x00000000 0 root 777 102400 1
0x00000000 196609 jackal 600 393216 2 dest
0x00000000 229378 jackal 600 393216 2 dest
0x00000000 262147 jackal 600 393216 2 dest
0x00000000 294916 jackal 600 393216 2 dest
0x00000000 327685 jackal 600 393216 2 dest
0x00000000 360454 jackal 600 393216 2 dest
0x00000000 393223 jackal 600 393216 2 dest
0x00000000 425992 jackal 600 393216 2 dest
0x00000000 458761 jackal 600 393216 2 dest
0x00000000 491530 jackal 600 393216 2 dest
0x00000000 524299 jackal 600 393216 2 dest
0x00000000 557068 jackal 600 393216 2 dest
0x00000000 589837 jackal 600 393216 2 dest
0x00000000 655374 jackal 600 393216 2 dest
0x00000000 688143 jackal 600 393216 2 dest
0x00000000 1114128 jackal 600 393216 2 dest
0x00000000 1146897 jackal 600 393216 2 dest
0x00000000 851986 jackal 600 393216 2 dest
0x00000000 983059 jackal 600 393216 2 dest
0x00000000 1015828 jackal 600 393216 2 dest
0x00000000 1474581 jackal 666 65536 1
0x00000000 1277974 jackal 600 393216 2 dest
0x00000000 1507351 jackal 666 65536 0
0x00000000 1540120 jackal 666 65536 0
0x00000000 1572889 jackal 666 65536 0
0x00000000 1605658 jackal 666 65536 0