如何关闭Gnu进程?

时间:2018-05-17 07:30:03

标签: perl gnuplot

我正在尝试使用Perl和 Chart::Gnuplot 用于Linux的模块代表一系列数据。它是这样的:

use strict;
use warnings;

use Chart::Gnuplot;

die "Linux check" if ( $^O ne 'linux' );

my $chart = Chart::Gnuplot->new(
    terminal => 'x11',
    title    => {
        text => "GRAPH",
        font => "Arial, 20"
    },
    xlabel => {
        text  => "X AXIS",
        font   => "arial, 20",
        offset =>"0,-1"
    },
    ylabel => {
        text   => "Y AXIS",
        font   => "arial, 20",
        offset =>"-6,0"
    },
);

my $dataSet = Chart::Gnuplot::DataSet->new(
    xdata => \@x_data,
    ydata => \@y_data,
    style => "points",
);

$chart->plot2d($dataSet);

exit;

当我从Eclipse运行它时,脚本工作正常并且图形显示正确,但该过程不会终止(关闭Gnuplot窗口将不起作用)。当我在终端上运行它时会发生类似的事情。

有问题的行是$chart->plot2d($dataSet),没有它,它可以正确终止。关闭窗户后我该怎么做才能结束它?

1 个答案:

答案 0 :(得分:3)

Chart::Gnuplot运行gnuplot,同时打开stdin和其他文件描述符。绘制图片后,gnuplot读取stdin等待更多命令。

一种解决方案是在执行绘图之前简单地将stdin重定向到perl程序中的/dev/null。这也会使图像立即显示和消失,因此您还应添加persist选项。以下是要更改的两行:

my $chart = Chart::Gnuplot->new(
    terminal => 'x11 persist',
...
open(STDIN, "<", "/dev/null") or die "Can't open /dev/null: $!";
$chart->plot2d($dataSet);