Perl 如何关闭Gnu进程?

Perl 如何关闭Gnu进程?,perl,gnuplot,Perl,Gnuplot,我正在尝试使用Perl和 用于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

我正在尝试使用Perl和 用于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)
,如果没有它,它可以正确终止。关上窗户后我该怎么做才能结束它

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

一种解决方案是在进行绘图之前,在perl程序中将stdin重定向到
/dev/null
。这也会使图像立即出现和消失,因此您还应该添加
持久化
选项。以下是要更改的两行:

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

open(STDIN,“可能是相关的,
plot2d()
命令似乎正在等待EOF字符。请尝试在终端窗口中按CTRL-D。我认为打印后它在终端中等待命令的原因是您指定了
terminal=>'x11'
选项。如果删除该选项并指定
output=>”test.png“
相反,它将保存到一个文件中,而不是在终端中等待进一步的命令,这两种方法都有效,但我希望脚本尽可能干净(我不想每次都按CTRL-D)并使用鼠标交互选项,因此.png输出没有足够的关闭
STDIN
(或者任何其他标准句柄(
STDOUT
STDERR
)都是一个非常非常糟糕的主意。打开的下一个文件(可能在某些模块中隐式向下调用堆栈15级)将获得文件描述符0,任何从
STDIN
读取的人都将看到“有趣”的输入。更好的是:
open STDIN,”谢谢你们!这完全符合我的要求,现在脚本不用等待命令就结束了