我有一个perl脚本调用fork()几次创建4个子进程。父进程然后使用waitpid()等待所有的孩子完成。Perl系统()命令失败后叉
当我尝试从子进程内调用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。
在日志的底部,我可以看到“命令以非零状态127退出”,我认为这可能与它有关。
我考虑过使用某种互斥锁来确保一次只有一个进程通过系统调用,但我怎么用fork()来做到这一点?另外,这个问题首先没有任何意义,为什么几个独立的进程在同一时间做系统(“dir”)有困难?
你为什么使用'system()'创建目录? – TLP
您使用的是哪个版本的perl?它是线程安全的吗? –
您能否提供(最少量的)代码来重现我们运行的问题? – ikegami