下,我有一个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