Proc::Background
を使用して、system
呼び出しのためにGUIがフリーズしないように、Tk GUIからユーザ定義プログラムを実行しています。私はこのPerlスクリプトの場所とは異なるディレクトリからユーザー定義のプログラムを起動できるようにしたい。Proc :: Background使用時に作業ディレクトリを変更する
これは可能ですか?私が使用するはずの別のモジュールはありますか?私はしたい
- プロセスを非同期に実行します。
- プロセスがまだ実行中かどうかを知ることができます。
- プロセスを強制終了できます。
- Unix/LinuxとWin32の両方をサポートします。
- プロセスの現在の作業ディレクトリを指定できること。
Proc::Background
は、少なくとも私が知る限り、#5を除くすべての要求を満たしています。
編集:2011年4月22日
は私が提案につき、フォーク::スーパーを試してみましたが、私は物事が正常に働いて得ることができませんでした。例えば、私はシグナルを殺す/プロセスを中断するのを見たいと思う。私は次のようなものを使用します:
my $pid = fork { dir => $my_dir, cmd => [ $my_cmd, $my_args ] };
my $ProcessObj = Forks::Super::Job::get($pid);
while($ProcessObj->is_active()) {
if($run_cmd_die == 1) {
$ProcessObj->kill(1);
}
}
これは決してwhileループから抜けることはありません。
私の最終的な解決策は、私のニーズを満たすようにProc::Background
を変更することでした。私はオプションのハッシュに新しいオプションのエントリを追加し、オプションのハッシュをWin32とUnixの_new
サブルーチンに渡しました。次に、Win32用のWin32 :: Process :: Create呼び出しにディレクトリを提供し、Unix用にchdirを使用することができます。
[ 'フォーク:: Super'は](http://search.cpan.org/perldoc?Forks::Super)のいずれか#5を行うことはできませんが、私は他にあり – mob
それを追加しますあなたが維持しているモジュールに必要な機能を追加する機能はありますか?それはサービスです! –