【发布时间】:2017-12-28 02:12:07
【问题描述】:
我在多个处理器上运行 Monte Carlo,但它挂了很多。所以我把这个 perl 代码放在一起,以终止挂起 monte carlo 的迭代并进入下一个迭代。但是我得到了一些错误,我还没有弄清楚。 我认为它睡眠时间太长,它会在查找它之前删除 out.mt0 文件。 这是代码:
my $pid = fork();
die "Could not fork\n" if not defined $pid;
if ($pid == 0) {
print "In child\n";
system("hspice -i mont_read.sp -o out -mt 4"); wait;
sleep(.8); wait;
exit(0);
}
print "In parent \n";
$i = 0;
$mont_number = $j - 1;
out: while (1) {
$res = waitpid($pid, WNOHANG);
if ($res == -1) {
print "Successful Exit Process Detected\n";
system("mv out.mt0 mont_read.mt0"); wait;
sleep(1); wait;
system("perl monte_stat.pl > rel_out.txt"); wait ;
system("cat stat_result.txt rel_out.txt > stat_result.tmp"); wait;
system("mv stat_result.tmp stat_result.txt"); wait;
print "\nSim #$mont_number complete\n"; wait;
last out;
}
if ($res != -1) {
if ($i >= $timeout) {
$hang_count = $hang_count+1;
system("killall hspice"); wait;
sleep(1);
print("time_out complete\n"); wait;
print "\nSim #$mont_number complete\n"; wait;
last out;
}
if ($i < $timeout) {
sleep $slept; wait;
}
$i = $i+1;
}
}
这是错误:
在 monte_stat.pl 第 73 行第 2 行非法除零。 mv:无法统计`out.mt0':没有这样的文件或目录 在 monte_stat.pl 第 73 行第 1 行非法除零。 mv:无法统计`out.mt0':没有这样的文件或目录 在 monte_stat.pl 第 73 行第 1 行非法除零。 mv:无法统计`out.mt0':没有这样的文件或目录 在 monte_stat.pl 第 73 行非法除以零。 mv:无法统计`out.mt0':没有这样的文件或目录 在 monte_stat.pl 第 73 行非法除以零。 mv:无法统计`out.mt0':没有这样的文件或目录 mv:无法统计`out.mt0':没有这样的文件或目录 mv:无法统计`out.mt0':没有这样的文件或目录 在 monte_stat.pl 第 73 行第 3 行非法除零。 mv:无法统计`out.mt0':没有这样的文件或目录 在 monte_stat.pl 第 73 行第 1 行非法除零。 mv:无法统计`out.mt0':没有这样的文件或目录谁能告诉我在哪里调试它。 谢谢
【问题讨论】:
-
发布一个最小的、完整的、可验证的例子。不要只是链接到您的代码。
-
我在您发布的代码中看不到任何线程。
-
@duskwuff 我添加了线程部分。这是完整的代码:github.com/aliyah3/Multi-thread-with-Perl/blob/master/…
-
你是在分叉,而不是线程。有很大的不同。
-
@simbabque 谢谢。我修改了问题。