VirtualBox Ubuntu下Makefile运行无限循环shell程序sh.c卡顿问题求助
问题原因
Make在执行命令时会默认捕获程序的标准输入,你的模拟shell是交互式程序,需要直接从终端读取用户输入,输入流被Make拦截后,就会出现无法输入、卡顿的情况。
解决方案
有几种可行的解决方式:
方法1:拆分编译与运行步骤
修改Makefile,不让all目标依赖run,分开执行编译和运行:
all: compile .PHONY: all clean run CC := gcc FLAG := -Wall SRC := sh.c EXE := sh compile: $(SRC) $(CC) -o $(EXE) $(SRC) $(FLAG) # 补上你定义的警告编译选项 run: ./$(EXE) clean: rm -rf $(EXE)
使用时先执行make完成编译,再单独执行make run启动你的shell程序,此时程序会直接连接终端,正常接收输入。
方法2:强制程序读取终端输入
修改run目标的命令,让程序直接从终端设备读取输入:
run: ./$(EXE) < /dev/tty
这样即使通过make一次性执行all目标,程序也能绕过Make的输入捕获,直接获取终端输入。
方法3:使用Make的忽略中断选项(不推荐)
执行make -i命令,该选项会让Make忽略中断信号,允许你用Ctrl+C退出,但本质上没有解决输入流被拦截的问题,只是增加了退出途径。
额外提示:你定义的FLAG := -Wall在原编译命令中未被使用,建议补上,编译时的警告信息有助于代码调试。
内容的提问来源于stack exchange,提问作者Learning
相关产品推荐
相关产品推荐

