Ваша структура кода может выглядеть так:
#!/usr/bin/perl
# I'm a.pl
#...
system "b.pl > ~/b.out &";
while (1)
{
my $time = localtime;
my ($fsize, $mtime) = (stat "/var/log/syslog")[7,9];
print "syslog: size=$fsize, mtime=$mtime at $time\n";
sleep 60;
}
, в то время как b.pl может выглядеть так:
#!/usr/bin/perl
# I'm b.pl
while (1)
{
my $time = localtime;
my $fsize_a = (stat "/var/log/auth.log")[7];
my $fsize_s = (stat "/var/log/syslog")[7];
print "fsize: syslog=$fsize_s auth.log=$fsize_a at $time\n";
sleep 60;
}
- a.pl и b.pl делают ихСамостоятельное задание.
- b.pl вызывается a.pl как фоновое задание, которое отправляет свой вывод b.out (не портит экран a.pl)
- Вы можете прочитать b.out с другого терминала, или после того, как a.pl будет завершен (или когда a.pl временно переведен в фоновый режим)
О прекращении работы двух сценариев:
- `ctrl-c` для a.pl
- ` killall b.pl` для b.pl
Примечание:
- b.pl никогда не прекратится дажекогда вы завершаете работу своего терминала (при условии, что ваш терминал запущен как настольное приложение), вам не нужна команда `nohup`.(Возможно, полезно только в консоли)
- Если ваш b.pl может время от времени выплевывать сообщения об ошибках, то вам все равно придется иметь дело с его stderr.Это оставлено как твоя домашняя работа.