系统命令在 Perl 和 CGI​​ 下如何运行

How does system command behave under Perl and CGI

我在 cgi 下有一个 Perl 脚本,其中包含以下内容:

system ("echo mystuff > myfile.txt")

如果我同时用两个请求命中此请求,是两个请求都尝试写入 myfile,还是因为系统导致分叉并暂停父进程直到子进程完成而阻塞?

使用传统的 CGI,您的两个请求将 运行 在两个不同的进程中。两者都不会阻止对方。如果你不走运(或者有足够的流量),竞争条件可能会混淆 myfile.txt.

的内容

如果脚本并行执行两次,那么它的两个实例都会调用 system 命令,echo 的输出可能会出现乱码。这发生在 CGI 下,或者如果您直接在命令行中 运行 脚本。如果你不喜欢那样,你可以使用 flock 之类的东西来确保一次只有一个进程是 运行,尽管你这样做时应该非常小心。