POSIXのようなシステムで最も簡単な方法は、実際にはすでに試した方法です。
system('/path/to/utility >> /redirect/to/log_file &');
Windowsでツールをバックグラウンドで実行する最も簡単な方法はstart.exe
、起動ヘルパーとして使用することです。
system('start /path/to/utility >> /redirect/to/log_file');
ただし、出力をログファイルにリダイレクトするように機能するかどうかはわかりません。また、この瞬間にテスト用のWindowsシステムがありません。
はい、つまり、現在のシステムによってはコードブランチが必要になりますが、他のソリューションでも必要になる場合があります。Perlにfork()
エミュレーションがある場合は、実際fork()
には両方のシステムで使用できます(stdoutをログファイルに簡単にリダイレクトできないため、これは少し複雑です。最初にPerlで開き、フォークされた子のstdoutにする必要があります。新しいプロセスの呼び出し)。Windows Perlにfork()
エミュレーションがない場合は、コードブランチも必要です。その場合fork()
、UNIXでのみ使用でき、WindowsWin32::Process::Create
のDETACHED_PROCESS
オプションで使用する必要があるためです。
ただし、startの使用がすでに機能しているかどうかを最初にお知らせください。そうでない場合は、start.exe
スラッシュを処理しない可能性があります。その場合、あなたは次のようなものを使わなければならないかもしれません
C:\\path\\to\\utility
代わりに(二重の円記号が重要です!単一の円記号は文字列リテラルで特別な意味を持ちます。これはエスケープ文字です)。
Windowsで実行しているかどうかを確認するには、変数$OSNAME
または$^OS
を見てください。Windowsでは「MSWin32」のように表示されます。