for($i=0;$i<1000;$i++) {
if($p=fork) {
next;
} elsif(defined($p)) {
sleep 10000;
exit;
} else {
print("$i\n");
<STDIN>;
}
}
数十個で子プロセスが生成されなくなります
メモリは十分あまってます
デスクトップヒープ領域が足りなくなったわけじゃなさそうです
どうすればメモリが足りる限り子プロセスを生成できるでしょうか?
windows xp avtive perl 5.8.7です。
No.2
- 回答日時:
64(に近い数字)が最大です。
これは、使われているWindowsのAPIの制限です。
(今、すぐにこのAPIの名前が出てきませんが)
Perl-Win32のメーリングリストで流れていました。
No.3
- 回答日時:
>具体的な解決方法はないのでしょうか?
この制約は1つのプロセスが生成出来るプロセスの上限を64にしているところからきていると思います。
もし、この64を他の値に変更する方法がない場合、以下の方法を採られてはいかがでしょうか。
1案、プロセスを生成するスクリプトをプロセスを複数立ち上げる。nプロセス立ち上げれば、n×64個生成できます。
2案、子プロセスが更に、親プロセスと同じ事(プロセスの生成)を行うようにする。
No.4ベストアンサー
- 回答日時:
forkと同じではないですが、Win32::Processはどうでしょう。
以下のスクリプトは100のプロセスを起動できているみたいです。
D:\@ai\@Perl\Process>test1.pl M
3780 start...
3824 start...
3664 start...
3620 start...
1124 start...
#!Perl
use Win32::Process;
use Win32;
sub ErrorReport{
print Win32::FormatMessage( Win32::GetLastError() );
}
my $param = shift;
my @proc;
if ($param eq "M") {
for (1..100) {
my $ProcessObj;
Win32::Process::Create($ProcessObj,
"C:\\Perl\\bin\\perl.exe",
"perl test1.pl",
0,
NORMAL_PRIORITY_CLASS,
".")|| die ErrorReport();
push @proc => $ProcessObj
}
} else {
print "$$ start...\n";
sleep 60;
print "$$ end\n";
}
__END__
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) 順列をランダムに発生するプログラム 1 2022/11/16 12:16
- Windows 10 実装メモリとタスクマネージャーのメモリ使用量不一致について 4 2022/12/15 01:07
- Excel(エクセル) vba 「Nextに対するForが見当たりません」のエラーが発生する原因 1 2022/10/21 15:46
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- 政治 私は文部科学省ヘ入り込んで投稿した私の建議文を彼らが私の依頼まましましょうか。? 2 2023/08/22 07:08
- Firefox(ファイヤーフォックス) firefoxが頻繁に停止する 1 2023/01/09 10:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
時間がかかり過ぎたプロセスを...
-
Excelで時刻になったら知らせて...
-
Perlで画像のサイズ取得する方法
-
【ExcelVBA】commandButtonをク...
-
Excel VBA 定義されたプロージ...
-
VBAのモジュールについて教えて...
-
ArduinoのジャイロモジュールMP...
-
VBAで別モジュールへの変数の受...
-
フォームメール@PerlとActiveP...
-
Fortranのサブルーチン引数につ...
-
MySQLとの接続でfetchrow_array...
-
connect タイムアウトのデフォルト
-
(Perl CPAN) DBDがはいらない
-
VBA モジュールで共通に使う変...
-
vba userFormのSubを標準モジュ...
-
レンタルサーバーでWWW::Mechan...
-
ショッピングカートのカスタマイズ
-
エラーでハマっている為、use A...
-
CGI(Perl)でメールフォームを作...
-
htmlフォームから受け取ったフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ハマったので助けて~。Apache...
-
AIX6でファイルのタイムスタン...
-
Active Directoryでグループに...
-
実行中のcpan processを終了さ...
-
open MAILでの"|"
-
時間がかかり過ぎたプロセスを...
-
Perl はOSによって動作が違った...
-
ディスク容量について
-
MS-DOSでperl実行時にコマンド...
-
system から得た情報を変数に入...
-
LinuxにおいてのPerlのプログラ...
-
HELOコマンドが失敗する。
-
Excel VBAでリンク切れをチェッ...
-
Excel VBA 定義されたプロージ...
-
例外処理のフローチャートの記...
-
ArduinoのジャイロモジュールMP...
-
ユーザー定義関数に#NAME?が返...
-
「デバイスは PRN を初期化でき...
-
VBAで別モジュールへの変数の受...
-
Excel VBA 『Call』で呼び出す...
おすすめ情報