我写了一个小型服务器程序。我想看看它是如何处理多个请求的。所以我编写了以下程序来模拟多个客户端。
伪代码:
main()
{
//set up all necessary data structures to connect to the server
fork();
fork();
fork();
create_socket();
connect()
//more code
}
有更好的方法吗?我可以使用哪些工具来测试C中的多线程程序(至少是基本功能)?
答案 0 :(得分:1)
你基本上用这种方法创建了一个“流程粉丝”,所以是的,这可以工作,虽然它不是线程......你实际上是在创建新的流程。因此,为了防止僵尸子进程,您需要“等待”所有进程在生成新进程的每个进程中完成。对于已调用main()
的所有进程,您可以使用fork()
末尾或附近的以下行执行此操作(即,包括子进程以及它们正在生成其他进程):< / p>
while(wait(NULL) != -1 || errno == EINTR);
这将等待当前进程产生的所有子进程,同时阻止由于您的进程捕获信号而导致wait()
的任何提前返回。如果当前流程没有剩余子流程,则wait()
将返回-1
并将errno
设置为ECHILD
,从而退出while循环。