Leser: 3
|< 1 2 >| | 11 Einträge, 2 Seiten |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!perl -w
use strict;
my $pid;
my $flag = 0;
if(!defined($pid = fork)) {
die "Cannot fork: $!";
} elsif($pid == 0) {
while($flag == 0) {
print "SLEEP FOR A SEC.\n";
}
} else {
sleep(1);
$flag = 1;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
sub pipe_to_fork ($) {
my $parent = shift;
pipe(my $child, $parent) or die;
my $pid = fork();
die "fork() failed: $!" unless defined $pid;
if ($pid) {
close $child;
}
else {
close $parent;
open(STDIN, "<&=" . fileno($child)) or die;
}
$pid;
}
if (pipe_to_fork('FOO')) {
# parent
print FOO "pipe_to_fork\n";
close FOO;
}
else {
# child
while (<STDIN>) { print; }
close STDIN;
exit(0);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use strict;
use warnings;
# Hier wird definiert, was getan werden soll, wenn
# ein USR1-Signal kommt
$SIG{"USR1"} = sub { print "Wie die Zeit vergeht...\n"; };
# Hier wird definiert, was getan werden soll, wenn
# ein Kindprozess sich beendet (also wenn ein CHLD-Signal
# kommt)
$SIG{"CHLD"} = sub { print "Und vorbei!\n"; exit(0); };
my $parent_pid = $$;
defined(my $child_pid = fork()) or die "fork problem";
if(! $child_pid){
# Child
for(1..3){
kill "USR1", $parent_pid; # ein USR1-Signal schicken
sleep 1;
}
exit(0);
}
# Parent
# wir muessen dafuer sorgen, dass der Prozess am Leben bleibt.
# Sonst koennen wir nicht mehr auf die Signale reagieren.
sleep while 1;
Quotekann ich anstatt USR1 jeden beliebigen String zur Kommunikation einsetzen?
1
2
3
4
5
6
7
8
9
10
11
12
13
sub Fortschrittsanzeige{
$|=1;
print "\b\|";
sleep(1);
print "\b/";
sleep(1);
print "\b-";
sleep(1);
print "\b\\";
sleep(1);
print "\b ";
return;
}
|< 1 2 >| | 11 Einträge, 2 Seiten |