下,我有一個Perl腳本下運行CGI下列要求:如何系統命令表現Perl和CGI
system ("echo mystuff > myfile.txt")
如果我打這兩個請求同時,一舉兩得請求嘗試寫入MYFILE,或做它會阻止系統導致分叉並暫停父進程,直到子結束爲止?
下,我有一個Perl腳本下運行CGI下列要求:如何系統命令表現Perl和CGI
system ("echo mystuff > myfile.txt")
如果我打這兩個請求同時,一舉兩得請求嘗試寫入MYFILE,或做它會阻止系統導致分叉並暫停父進程,直到子結束爲止?
如果腳本並行執行兩次,那麼它的兩個實例都會調用system
命令,並且echo
的輸出可能會出現亂碼。這發生在CGI下,或者直接在命令行中運行腳本。如果你不喜歡那樣,你可以使用像flock這樣的東西來確保一次只運行一個進程,但是如果你這樣做,你應該非常小心。
使用傳統的CGI,您的兩個請求將在兩個不同的進程中運行。兩者都不會阻止對方。如果您不幸(或者擁有足夠的流量),競爭條件可能會影響myfile.txt
的內容。
是的。一種解決方法是在每個腳本中寫入一個獨特的文件,比如'myfile. $$。txt',其中'$$' - 在Perl和sh中 - 被當前進程ID替換。 – mob