php会话文件死锁

时间:2011-07-02 00:44:43

标签: php linux deadlock

在为某人修复网站时,我遇到了以下问题:

为了处理某些数据,它会调用exec("/usr/bin/php /path/to/file.php input.dat"),而被调用的file.php包含include("config.php"),而session_start()则包含对flock("/tmp/sess_XXXXXX")的调用

发生的问题是等待exec的死锁。父脚本会锁定会话文件,然后exec'ed脚本会尝试继续同一个会话,再次锁定该文件,但会等待它死锁。

我尝试在session_save_path("/tmp/alt_session"); session_id("NOTHING"); 'ed脚本的最开头添加以下内容,但无济于事:

exec("php ...")

很明显,从php脚本中调用exec会有一些明显的荒谬,但这是另一天的争论,而不是我可以在这里改变的东西。此外,虽然我可以随意更改在config.php下运行的文件,但更改{{1}}会产生一些其他令我头疼的问题。

还有其他选择,还是我错过了重要的内容?

1 个答案:

答案 0 :(得分:3)

There is a php bug that I believe relates to your problem.

简而言之,解决方案是在session_write_close()之前运行file_get_contents(),(在您的情况下为exec()