簡體   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