1

次のスクリプトを実行すると、実行したいことを正確に実行して終了します。

setDisplay.sh:

#!/bin/bash

Xvfb -fp /usr/share/fonts/X11/misc/ :22 -screen 0 1024x768x16 2>&1 &
export DISPLAY=:22

を実行する./setDisplay.shと、すべて正常に動作します。

OK、ここからが楽しみの始まりです...

setDisplay を呼び出す Perl スクリプトがあります...

eamorr.pl スクリプトは次のとおりです。

#!/usr/bin/perl

use strict;
use warnings;

my $homeDir="/home/eamorr/Dropbox/site/";

my $cmd;
my $result;

print "-----Setting display...\n";
$cmd="sh $homeDir/setDisplay.sh";
print $cmd."\n";
$result=`$cmd`;
print $result;

実行するとハングするだけです./eamorr.pl

私は完全に立ち往生しています...

4

1 に答える 1

9

これを行う場合:

$result=`$cmd`;

perl プロセスを外部コマンドに接続するパイプが作成され、perl はそのパイプから EOF まで読み取ります。

外部コマンドは、stdout にパイプがまだあるバックグラウンド プロセスを作成します (また、stderr を実行したため2>&1)。バックグラウンド プロセスが終了するか、stdout と stderr を閉じるか、別の場所にリダイレクトするまで、そのパイプに EOF はありません。

の stdout と stderr をXvfbperl variableに収集する場合$resultは、当然、それが終了するまで待つ必要があります。あなたがそれを意図していないなら、私はあなたが2>&1.

また、exportコマンドで終わるスクリプトも疑わしいです。自身の環境を変更することしかできず、すぐに終了するため、目立った影響はありません。通常、これは誰かが親プロセスの環境を変更しようとしている兆候ですが、これは不可能です。

于 2013-06-20T20:26:38.057 に答える