grasshopper!!! has asked for the wisdom of the Perl Monks concerning the following question:
How to fork gnuplot, write an initial string to it then background the process. Mean while parent is fetching data and writing to data file.This will run but after one replot gnuplot does not update as if dead.Can run similar program putting gnuplot string(DATA section) in file of its own and spawn gnuplot with this file as its source.Why does this code seem to freeze.How to fork open pipe write to it,exit but leave process running.
#!/usr/bin/perl -w my $pid; $pid = fork; if($pid == 0) { my $pid1 = open(CHILD, "|-", "gnuplot -persist ") or die "Couldn't + fork: $!\n"; local $/=undef; my $plot=<DATA>; print CHILD "$plot\n"; close(CHILD); print"forking\n"; exit; } use LWP::Simple; use Fcntl qw(:DEFAULT :flock); $|++; $SIG{TERM}=sub{print "ok1\n";alarm(0);exit;}; my $url='https://www.cryptonator.com/api/ticker/btc-gbp'; print"ok2\n"; my $interval = 30; # seconds between calls fetch(); sub fetch{ print"ok3\n"; my $replie = get($url); print"$replie \n"; my($a,$b,$c,$d)= $replie =~ /^.+?(\d+\.\d+).+?(\d+\.\d+)?.+?(\d+\ +.\d+).+?(\d+).*$/; $a="not defined" unless defined($a); $b="not defined" unless defined($b); $c="not defined" unless defined($c); $d="not defined" unless defined($d); open(OUT,">>","/home/philip/Desktop/PERLBITCOIN/TICKER/bitgbp1 +.dat") or die "BIT File open error $!\n"; unless (flock(OUT, LOCK_EX|LOCK_NB)) { warn "can't immediately write-lock the file ($!), blocking + ..."; unless (flock(OUT, LOCK_EX)) { die "can't get write-lock on numfile: $!"; } } print OUT "$c,$a,$d\n"; flock(OUT, LOCK_UN) or die "cant unlock file\n"; close(OUT); #print "$c,$a,$d\n"; alarm($interval); }; $SIG{ALRM}=\&fetch; 1 while 1; __DATA__ reset delta_v(x) = ( vD = x - old_v, old_v = x, vD) old_v = NaN unset key set xtics border in scale 0,0 nomirror rotate by -90 offset character + 0,0 autojustify set datafile separator ',' set bmargin at screen 0.15 #set palette defined (100 "red", 200 "green", 300 "blue") set palette defined (-1 "red", 1 "#1B6821") #set palette model RGB defined ( -1 'red', 1 '#006400', 0 'black' ) set cbrange [-1:1] set grid set yrange [*:*] unset colorbox set style fill solid noborder #set xrange [1446061653-946684800:1446064653-946684800] set xdata time set timefmt "%s" set format x "%H:%M" # or anything else set xlabel "time" set xtics autofreq data=system("tail -n 1 '/home/philip/Desktop/PERLBITCOIN/TICKER/bitgbp +1.dat' | awk '{print $0}'") print delta_v(2) plot '< tail -n 40 /home/philip/Desktop/PERLBITCOIN/TICKER/bitgbp1.dat +' using 3:2:((delta_v($2) > 0.0) ? 1 : -1 )with impulses lw 2 palett +e pause 10 reread replot;
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: fork spawn write background problem
by BrowserUk (Patriarch) on Oct 29, 2015 at 15:53 UTC | |
by grasshopper!!! (Beadle) on Oct 30, 2015 at 16:09 UTC | |
by BrowserUk (Patriarch) on Oct 30, 2015 at 17:40 UTC | |
|
Re: fork spawn write background problem
by Preceptor (Deacon) on Oct 29, 2015 at 13:26 UTC | |
by grasshopper!!! (Beadle) on Oct 29, 2015 at 14:51 UTC | |
by GotToBTru (Prior) on Oct 29, 2015 at 15:22 UTC | |
by grasshopper!!! (Beadle) on Oct 30, 2015 at 21:19 UTC |