我正在尝试做一个基本的多处理任务,这就是我所拥有的。首先,我不知道将此程序作为非阻塞程序的正确方法,因为当我等待孩子的响应(使用waitpid
)时,其他进程也必须在队列中等待,但,如果某些子进程在之前死亡(我的意思是进程死于无序)会发生什么?所以,我一直在寻找,我发现我可以得到刚刚死亡的进程的PID,因为我使用的是waitpid(-1, WNOHANG)
。我总是得到一个警告,WNOHANG
不是一个数字,但是当我添加lib sys_wait_h时,我没有得到那个错误,但脚本从未等待PID,可能是什么错误?在Perl中进行多处理任务时出现问题
#!/usr/bin/perl #use POSIX ":sys_wait_h"; #if I use this library, I dont get the error, but it wont wait for the return of the child use warnings; main(@ARGV); sub main{ my $num = 3; for(1..$num){ my $pid = fork(); if ($pid) { print "Im going to wait (Im the parent); my child is: $pid\n"; push(@childs, $pid); } elsif ($pid == 0) { my $slp = 5 * $_; print "$_ : Im going to execute my code (Im a child) and Im going to wait like $slp seconds\n"; sleep $slp; print "$_ : I finished my sleep\n"; exit(0); } else { die "couldn’t fork: $!\n"; } } foreach (@childs) { print "Im waiting for: $_\n"; my $ret = waitpid(-1, WNOHANG); #waitpid($_, 0); print "Ive just finish waiting for: $_; the return: $ret \n"; } }
在此先感谢,再见!
谢谢!我正在使用wait(),它的工作原理!谢谢! – pablomarti 2010-10-27 15:34:25