繁体   English   中英

如何自动停止程序。c 并在 Linux 中输入命令?

[英]How to automatically stop a program.c and input a command in Linux?

所以我有这个程序,它应该是 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”以便服务器在 backgroundg 中运行(就像你执行命令“./ 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 &

先谢谢了

这里可能是一个 XY 问题——你为什么要这样做?

基本问题是,这假定您的服务器程序是从 shell 运行的,并且您想返回到 shell 做一些事情。 但是服务器在此期间会做什么呢? shell 将(需要)控制输入和 output 所以服务器几乎只需要等待。

你可以通过调用 kill 获得与 ^z 相同的效果:

kill(getpid(), SIGSTOP);

将让服务器向自身发送一个 STOP 信号。 shell(正在监视程序的进度)会注意到这一点并打印“已停止”消息,然后提示您要做什么。 服务器将停止,您可以使用 shell 的fg命令恢复它(或使用bg将其置于后台)。 但是,如果您的服务器程序不是从 shell 运行(它只是直接在终端中运行),这只会停止服务器并且不会发生其他任何事情。

更常见的是,您要在这里运行一个子 shell:

system(getenv("SHELL"));

这将启动一个新的 shell 并等待它完成。 当 shell 退出时(使用exit命令或在 shell 提示符下键入 ^d),服务器将恢复。

如果希望服务器在 shell 运行时继续运行,可以使用 fork+exec 在 child 中运行 shell 并在 parent 中继续运行服务器,但需要小心使用终端输入和 Z748E6221F39813D(服务器和 shell 将为此而战)。

你不能只做系统(“bg”); ? 你不需要停止程序只需要把它放在后台

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM