8

perlで子プロセスを実行したい。また、コードをプラットフォームに依存しないようにしたいと考えています (ファイルパスなどのいくつかの不具合を除いて、Windows でも UNIX でも同じです)。

問題は、Windows での fork の perl 実装であり、疑似プロセスであり、実際にはスレッドです。Windows 用の perl フォーク エミュレーションについては、こちらを参照してください。

また、疑似プロセスでの実行killとコマンドの問題についても言及しています。exec異なるプラットフォームで 2 つの異なるバージョンの fork を使用しても安全でしょうか?それとも OS 固有の API を使用する必要がありますか?

4

2 に答える 2

5

Forks::Superこれらの移植性に関する多くの懸念を既に心配して対処しており、次のようなコードを移植可能に実行できます。

use Forks::Super;

$pid = fork();
if ($pid != 0) {
   ...
   if (kill 'ZERO',$pid) { print "Job is running.\n"; }
   kill 'STOP', $pid; # or $pid->suspend
   kill 'CONT', $pid; # or $pid->resume
   kill 'TERM', $pid; # or $pid->terminate
   waitpid $pid, 0;   # or $pid->wait or $pid->waitpid(0)
}
于 2013-01-07T16:44:01.793 に答える
4

非同期プロセスが必要な場合は、プラットフォーム固有の API を使用してください (子を待つことができる場合は、systemまたはを使用できますqx)。

UNIX ではfork/で、 Windows では/です。Windows での fork エミュレーションは勇敢な試みでしたが、この分野ではプラットフォームが大きく異なります。execWin32::Process::Create

subprocess例: python はインターフェイスをモジュールと統合しようとしました。これは単純なもので機能しますが、4 つの UNIX 固有のパラメーターと 2 つの Windows 固有のパラメーター (Popen への) があります。

于 2013-01-07T13:22:08.933 に答える