0

さまざまなPerlスクリプトを実行するシステムがあり、これらのスクリプトの特定のパラメーターをインターセプトして、カスタムシェルスクリプトに渡したいと思います。

これは私が持っているものです:

#!/usr/bin/microperl
[...]

if ($number) {
    if (&number_is_b($number)) {
        system("touch $STATE_LOCKED1");
        print 1;
    }
    else {
        system("/script/myscript.sh $number");
        print 2;
    } 
}
else {
    [...]
}

私が追加したのは

system("/script/myscript.sh $number");

これは、パラメータを渡す次のシェルスクリプトを呼び出します$number

#!/bin/sh
result=$(wget -qO- http://x.x.x.x/result?qs=$1)
[...]

これですべて正常に動作しますが、時間がかかる可能性があるため、シェルスクリプトの結果を待たずに元のPerlスクリプトを続行したいと思いますwget。シェルが正常に完了したかどうかを気にせずに自律的に続行するには、Perlスクリプトが必要です。

それを起動させて、どうやってそれを忘れて続行することは可能ですか?

どうすればそれができるかについて何か提案はありますか?

4

1 に答える 1

5

おそらくそれを機能させる1つの方法は、コマンドに&を追加して、バックグラウンドで実行することです。ただし、これはUNIXのすべてのバージョンで常に機能するとは限りません。しかし、試してみる価値はあります。

system("/script/myscript.sh $number &");

これが機能しない場合、私が知っている他の2つのオプションがあります。1つの方法は、フォークを使用することです。http://perldoc.perl.org/functions/fork.html。この方法は少し手間がかかる場合があります。

WindowsとUNIXの両方でバックグラウンドでプロセスを実行できるようにするモジュールProc::Backgroundもあります。

于 2013-03-10T09:41:46.000 に答える