You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 07:35:21