如何关闭Gnu进程?

问题描述 投票:1回答:1

我正在尝试使用Perl和用于Linux的Chart::Gnuplot模块创建一个脚本来表示一系列数据。它是这样的:

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)没有它可以正确终止。关闭窗户后我该怎么做才能结束它?

perl gnuplot
1个回答
3
投票

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

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

my $chart = Chart::Gnuplot->new(
    terminal => 'x11 persist',
...
open(STDIN, "<", "/dev/null") or die "Can't open /dev/null: $!";
$chart->plot2d($dataSet);
© www.soinside.com 2019 - 2024. All rights reserved.