开发者社区> 问答> 正文

根据编译时终端的显示判断编译是否卡住的问题

需求如下: 编译时会卡住,所以需要当终端上显示的编译信息在一段时间不更新后重新编译

  1. 开始时认为编译信息写到标准输出时对应的编译线程的标准输出文件的修改时间会改变,所以想通过shell脚本取得编译的进程pid,然后将当前时间与文件/proc/pid/fd/1的修改时间比较。 但是现在发现编译信息写到标准输出后/proc/pid/fd/1的修改时间并不会改变。

上面的想法是否有其它的实现方法?

  1. 还有一个想法是将编译信息重定向到文件,然后判断文件的修改时间或判断文件的最后一行是否有变化。但是因为编译信息很多,全写入文件估计会使文件特别大。

能不能使文件只保存最新的编译信息?

======================================================
问题解决了

其实是自己没有再多想一想,/proc/pid/fd/1是一个符号链接,指向的是/dev/pts/n,也就是编译的线程将stdout输出去了/dev/pts/n设备上了,而当终端有内容更新时/dev/pts/n的修改时间就会变化。
所以根据/dev/pts/n的修改时间就可以判断编译是否卡住了

展开
收起
a123456678 2016-06-17 15:19:44 2369 0
1 条回答
写回答
取消 提交回答
  • tmux 有个 monitor-silence 选项,可以指定指定的窗口在指定的时间内没有输出则显示通知。有这个通知的窗口的标题会有 ~ 字符。据此可以写个脚本来监视。

    比如,单独开个 tmux session,然后连一个 client 过去,一个窗口里跑编译,另一个窗口里监视。

    wid=@137
    while true; do
      win=$(tmux list-window -F '#{window_index} #{window_id} #{window_flags}' | grep "$wid.*~")
      if [[ -n $win ]]; then
        windex=$(echo $wid | cut -d' ' -f1)
        tmux send-keys -t $windex ls c-m
        tmux select-window -t $windex
        tmux select-window -t \!
      fi
      sleep 1
    done

    开头的 $wid 是通过 tmux list-window 取得的。在 tmux 1.8 + zsh 5.0 中测试通过。

    2019-07-17 19:42:52
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
15分钟打造你自己的小程序 立即下载
小程序 大世界 立即下载
《15分钟打造你自己的小程序》 立即下载