【发布时间】:2011-11-04 02:27:47
【问题描述】:
我有一个 perl 脚本,它调用 fork() 几次来创建 4 个子进程。然后父进程使用 waitpid() 等待所有子进程完成。
当我尝试从子进程中调用 system() 时出现问题(我正在使用它来创建目录)。即使像 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 时仍然存在”之类的消息,但只有 1 个子线程达到 2.65。
在日志的底部,我可以看到“Command exited with non-zero status 127”,我认为这可能与它有关。
我考虑过使用某种互斥锁来确保一次只有 1 个进程通过系统调用,但是我如何使用 fork() 来做到这一点?另外,这个问题本来就没有任何意义,为什么几个独立的进程同时执行 system("dir") 会有问题?
【问题讨论】:
-
为什么要使用
system()创建目录? -
你使用的是什么版本的 perl?它是线程安全的吗?
-
您能否提供(最少的)重现问题的代码供我们运行?
标签: perl system fork parallel-processing