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

Linux下如何让dotnet test命令在后台正常运行不自动停止

dotnet test 后台运行无输出/自动停止解决方案

问题原因

该现象由两个.NET运行时的默认行为叠加导致:

  • dotnet test 默认会检测标准输入流、尝试读取交互输入,后台运行的进程没有控制终端权限,尝试读取终端时会触发系统SIGTTIN信号,被系统强制暂停运行
  • 控制台输出默认开启缓冲机制,只有缓冲区满或者进程主动刷新时才会写入日志文件,前台运行时刷新策略更激进,因此切前台后日志立刻出现

可用解决方法

方法1:最简后台运行(当前终端会话内有效)

添加禁用交互参数+重定向标准输入到空设备,直接用&后台运行即可:

dotnet test --no-interaction --filter "FullyQualifiedName~GenerateTransactions" < /dev/null >> dotnet.log 2>&1 &
  • --no-interaction:禁用所有需要用户交互的提示逻辑,从根源避免读取输入的需求
  • < /dev/null:将标准输入指向空设备,进程读输入会直接得到EOF,不会触发终端读取请求

方法2:关闭终端也不终止(适合手动执行场景)

用nohup包裹命令,会自动处理输入重定向、忽略终端挂断信号,关闭当前终端后进程仍会正常运行:

nohup dotnet test --no-interaction --filter "FullyQualifiedName~GenerateTransactions" >> dotnet.log 2>&1 &

方法3:完全脱离控制终端(适合脚本内调用)

用setsid给进程创建独立会话,完全脱离当前终端的任务管理体系,不会出现在当前shell的后台任务列表中:

setsid dotnet test --no-interaction --filter "FullyQualifiedName~GenerateTransactions" >> dotnet.log 2>&1

日志实时输出优化

如果需要日志实时写入文件不需要等待缓冲,添加环境变量禁用控制台输出缓冲即可:

DOTNET_LOGGING_CONSOLE_DISABLEBUFFERING=1 dotnet test --no-interaction --filter "FullyQualifiedName~GenerateTransactions" < /dev/null >> dotnet.log 2>&1 &

内容的提问来源于stack exchange,提问作者Alexander Todorov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:48:03