【发布时间】:2015-10-30 20:15:42
【问题描述】:
我在这个 C 练习中发现了一些困难:我被要求创建一个服务器套接字,它(通过无限循环)从输入流中读取一个字符串。如果字符串读取“self”,则服务器在输出流上打印服务器自己的 pid。如果它读取“fork”,它会调用 fork() 函数并打印孩子的 pid。 我正在考虑将这些行包含在 while 循环中
if (strcmp(val,"self")==0) sprintf(result,"%d\n",getpid());
else if (strcmp(val,"fork")==0){
pid = fork();
if (pid == 0) sprintf(result, "%d\n", getpid());
我测试了它,当我只写一次“self”或“fork”时,它实际上工作正常。如果我多次尝试发出“fork”命令,它就会“卡住”,这意味着我必须重复该命令两到三遍才能真正获得所需的结果。
这是我做的一个例子(我使用 telnet 来测试服务器):
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
self
4313
fork
4324
fork
fork
self
4313
fork
fork
fork
4327
fork
fork
fork
4328
有什么想法吗?
【问题讨论】:
-
我们需要查看
fork代码的其余部分。为什么要输出在孩子身上?孩子输出后做什么? -
请提供SSCCE:sscce.org
标签: c sockets fork pid child-process