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

如何避免Bash停止后台运行的.NET gRPC服务进程

解决Linux后台启动.NET gRPC服务器被Bash停止的问题

问题原因

你的gRPC服务器启动后会阻塞等待标准输入(比如Console.ReadLine()),当用&放到后台运行时,后台进程默认无法访问终端的标准输入,Bash会给进程发送SIGTTIN信号,导致进程被暂停。而ASP.NET Core服务器不会阻塞等待标准输入,它的主线程专注于处理请求事件循环,所以不会触发这个问题。

方案一:调整启动命令

  • 重定向标准输入到空设备:启动时把标准输入导向/dev/null,让进程读取输入时直接得到EOF,不会触发暂停信号:
    dotnet MyServer.dll < /dev/null &
    
  • 使用nohup命令:nohup会断开进程与当前终端的关联,默认把输出写入nohup.out,彻底避免终端相关信号影响进程:
    nohup dotnet MyServer.dll &
    
  • 用终端复用工具:比如screen或tmux,先启动工具创建会话,在会话内运行服务器,再分离会话,进程会在后台持续运行,不受当前终端关闭影响。

方案二:修改程序代码

  • 移除等待标准输入的逻辑:如果服务器不需要从标准输入读取内容,直接删掉Console.ReadLine()或类似阻塞读取输入的代码,进程就不会尝试访问终端输入。
  • 在程序内重定向标准输入:如果必须保留现有代码结构,可以在服务器启动前添加以下代码,把标准输入重定向到空流,读取操作会直接返回:
    Console.SetIn(new StreamReader(Stream.Null));
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:17:37