我已经用 C 编写了这个测试 CGI 程序。
int main(int argc, char *argv[])
{
sem_t *mysem;
mysem = sem_open("/MyClient", O_CREAT | O_EXCL, S_IRUSR | S_IWUSR, 10);
if(mysem == SEM_FAILED)
{
// already running
if(errno == EEXIST)
{
fprintf(stdout, "Content-type:text/plain\n\n");
fprintf(stdout, "Already running");
exit(1);
}
else
{
fprintf(stdout, "[error] - ", errno);
exit(1);
}
}
fprintf(stdout, "Content-type:text/plain\n\n");
int i = 0;
for(;i <10; i++)
{
sleep(1);
}
fprintf(stdout, "all done by PID - %d\n", getpid());
sem_unlink("MyClient");
sem_close(mysem);
return 0;
}
我正在将 Apache 用于 Web 服务器。当我在浏览器中转到“localhost/cgi-bin/mycgi”时(同时打开两个选项卡)。
输出应该是这样的(预期)
(对于 Tab1)“全部由 PID - 8186 完成”
和(对于 Tab2)“已经在运行”
但我明白了(实际)
(对于 Tab1)“全部由 PID - 8186 完成”
和(对于 Tab2)“全部由 PID - 8187 完成”
如果我在终端中执行程序(2 个实例),上述代码将按预期工作。