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

如何检测子进程是否正在等待屏幕输入?

检测Pi-hole安装子进程是否等待交互式输入的方法

首先说句实在的,Pi-hole本身就支持非交互式安装,这比费劲检测输入等待要高效得多。不过如果你确实需要检测子进程是否卡在等待输入的状态,下面是几种可行的方法:

一、通过进程状态和文件描述符判断

  • 查进程状态:用ps命令看目标进程的状态标记,等待终端输入的进程一般会显示T(停止状态,等着终端输入)或者S(可中断睡眠),再结合控制终端信息确认。比如执行ps -o state,pid,tty -p <子进程PID>,如果tty是当前终端且状态为T,基本就是在等输入了。
  • 看标准输入状态:用lsof工具查进程的标准输入(文件描述符0),如果显示的是终端设备(比如/dev/pts/0)且处于可读等待状态,说明进程在等输入。命令示例:lsof -p <PID> | grep -E 'FD=0.*CHR'

二、用终端交互工具检测+自动处理

  • expect工具:这是处理交互式脚本的老伙计,既能检测进程抛出的输入提示符,还能自动帮你输入。比如写个expect脚本匹配Pi-hole的选择菜单,一旦匹配到就知道进程在等输入,同时自动发送方向键或选择项。示例片段:
spawn pihole -r
expect "Select Upstream DNS Provider"
send -- "1\r"
expect eof
  • script命令监控会话:用script -q -c "./pihole-install.sh" output.log运行安装脚本,然后实时盯着日志内容,当出现“Upstream DNS”这类菜单关键词时,就判断进程在等输入。

三、最优解:直接用Pi-hole的非交互式安装参数

没必要绕弯子,Pi-hole官方早就给了完全自动化的安装方式,靠环境变量就能跳过所有交互:

  • PIHOLE_SKIP_OS_CHECK=true:跳过系统兼容性检查
  • PIHOLE_DNS_1="8.8.8.8" PIHOLE_DNS_2="8.8.4.4":指定上游DNS服务商
  • 还有其他参数比如PIHOLE_SKIP_GIT_CLONE、PIHOLE_SKIP_INSTALL可以按需设置
  • 完整的非交互式安装命令示例:
curl -sSL https://install.pi-hole.net | PIHOLE_SKIP_OS_CHECK=true PIHOLE_DNS_1="8.8.8.8" PIHOLE_DNS_2="8.8.4.4" bash

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 11:12:17