在fork之后,Perl system()命令失败

时间:2011-08-25 22:18:13

标签: perl system fork parallel-processing

我有一个perl脚本,它调用fork()几次来创建4个子进程。然后,父进程使用waitpid()等待所有子进程完成。

当我尝试从子进程中调用system()时,会出现问题(我正在使用它来创建目录)。即使像系统(“dir”)这样简单的东西也会失败(是的,我在Windows上)。

通过“失败”,我的意思是其中一个子线程没有问题,但是另一个孩子进程到目前为止我只能说它不再存在。

trace INFO, "Thread $thread_id still alive at 2.62";
system("dir");
trace INFO, "Thread $thread_id still alive at 2.65";

我收到诸如“线程3仍然活着在2.62”之类的消息,但只有一个子线程达到2.65。

在日志的底部,我可以看到“命令退出非零状态127”,我认为这可能与它有关。

我考虑过使用某种互斥锁来确保一次只有1个进程通过系统调用,但是如何使用fork()呢?此外,这个问题首先没有任何意义,为什么几个独立的进程同时在系统(“dir”)上有麻烦?

1 个答案:

答案 0 :(得分:2)

这里的问题是使用线程在Windows下模拟fork()。所以没有创建真正的流程。

如果您使用系统调用来创建文件夹,那么您最好使用perl函数mkdirFile::Pathmake_path。< / p>