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

如何检查以分离模式启动的命令的运行状态

如何检查以分离模式启动的命令的运行状态

这个问题我碰到过好几次,给你几个实用的解决方案,根据你的使用场景选就行:

  • 保存进程ID,结合wait和kill命令检查
    当你执行cmd1 &后,shell会立刻返回这个后台进程的PID,你可以用$!这个内置变量直接捕获它,先把PID存下来:

    cmd1 &
    pid=$!
    
    • 如果你想等待命令结束并获取退出状态,直接用wait $pid,这条命令会阻塞直到进程结束,之后用echo $?就能拿到它的退出状态(0表示成功,非0表示失败)。
    • 如果你不想阻塞,想先判断进程是否还在运行,可以用kill -0 $pid:如果这条命令返回0,说明进程还在跑;如果返回非0,说明进程已经结束了,这时候再执行wait $pid(不会阻塞),然后echo $?就能拿到退出状态。
  • 将退出状态写入文件(跨会话也能用)
    如果你需要在退出当前shell会话后,还能查看命令的运行状态,可以在启动命令时,直接把退出结果写入一个指定文件:

    (cmd1; echo $? > cmd1_exit_status.txt) &
    

    这样一来:

    • 如果文件不存在,说明命令还在运行;
    • 文件存在的话,直接查看文件内容cat cmd1_exit_status.txt,0就是执行成功,非0就是执行失败。
      这个方法的好处是完全不受shell会话的限制,即使你关掉当前终端,只要进程还在运行,结束后依然会把状态写入文件。
  • 同一shell会话内用jobs命令快速查看
    如果你还没退出当前启动命令的shell,可以直接用jobs命令查看后台任务状态:

    jobs -l
    

    输出里会显示进程的PID、状态(比如Running表示还在运行,Done表示成功结束,Exit 1表示失败退出)。不过这个方法仅限当前shell会话,一旦退出再重新登录,就看不到这个后台任务了。

备注:内容来源于stack exchange,提问作者Pat. ANDRIA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 15:13:14