#!/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