2011-12-09 60 views
0

我有perl腳本從cgi頁面產生併成爲一個運行在自己的守護進程。如果從它正在使用的任何模塊中調用某個模塊,該腳本即使在eval塊中處理過,也會被調用。但是,當我從命令提示符運行腳本時,一切正常,錯誤得到處理。模具不能從perl cgi

注:在命令行中還劇本正在成爲一個守護進程

+0

更正:如果有任何模塊正在使用該模塊,則該腳本將被終止,儘管它已在eval塊中處理。 – Kallol

回答

0

對不起,沒有真正的答案在這裏,但有些事情尋找到...

如果你產卵從mod_perl的工作記住它比平常更復雜。您需要關閉文件描述符,httpd/mod_perl將不僅僅打開0,1和2。我們最終編寫了一個從0到255關閉的循環。我還認爲stdout不是從內存中獲得的。

但不知道爲什麼eval不會工作。你使用exec產生腳本嗎?在這種情況下,它應該和從shell運行它一樣。當你說它「被殺死」時,你的意思是死亡是否導致scirpt退出(好像沒有eval)?或者是其他東西。如果其他東西可以繼承mod_perl運行的httpd進程的信號處理程序?

+0

stdin,stdout和stderr分別是文件描述符0,1和2 –

+0

用於從cgi調用腳本我已經使用過系統調用.. system(「script_to_daemonize」); 在這個腳本中,我已經對它進行了簡化: my $ pid; if($ pid = fork()){ exit 0; } 致命(「無法分叉!:$!」)除非定義了$ pid; ##試圖設置獨立會話 setsid()!= -1或致命(「無法setsid():$!\ n」); $ pid =分叉和退出; 致命(「無法分叉!:$!」)除非定義了$ pid; – Kallol

+0

看起來很好,抱歉不知道你的問題是什麼。 – Sodved