【发布时间】:2021-04-14 11:50:00
【问题描述】:
所以我有这个程序,它应该是 Linux 中的(超级基本)服务器,它向我显示这个菜单:
What u want to do?
0 -> Exit
1 -> Add product
2 -> Show products list
3 -> Turn on server
我希望它在您输入数字 3 时停止 server.c,就像您按下 CTRL + Z 并发送命令“bg”以便服务器在后台运行时一样(就像您执行命令时一样) "./server&") 这样我就可以打开 client.c 并与服务器交互。
当您输入 3 时我希望它执行的操作示例(在这里我在 propmt 上手动完成):
estgv18708@viriato:~/tp6$ ./server
What u want to do?
0 -> Exit
1 -> Add product
2 -> Show products list
3 -> Turn on server
3
^Z
[1]+ Stopped ./server
estgv18708@viriato:~/tp6$ bg
[1]+ ./servidor &
提前致谢! :D
【问题讨论】:
-
“停止”或暂停的程序与在后台运行的程序不同。要暂停程序,请发送 SIGSTOP(或 control+Z)。您可以使用
signal.h中的kill函数向 pid 发送信号 -
我想你想要的是创建一个守护进程,见stackoverflow.com/questions/17954432/creating-a-daemon-in-linux
-
听起来你真正想要的是服务器程序独立运行,这样你就可以同时运行你的服务器和客户端。最好的方法是打开两个终端,这样每个会话都有自己的 TTY。否则你的 IO 将在两者之间打乱。您似乎也将暂停的程序与在后台运行的程序混淆了。后台程序本质上是在同一个 TTY 中分叉和执行的,而暂停的程序真正停止执行,直到它们收到恢复信号。
-
正如@Geoffroy 提到的,你的服务器的生产使用应该通过一个守护进程来配置,但是你会在你的守护进程中丢失 IO,因此菜单并不是一个好主意。
-
你仍然可以运行菜单然后只 fork 进入一个守护进程不是吗? @h0r53