shell 脚本 sleep 1 秒都会卡住是什么原因 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
koebehshian
V2EX    Linux

shell 脚本 sleep 1 秒都会卡住是什么原因

  •  
  •   koebehshian 2018-01-24 10:41:15 +08:00 6269 次点击
    这是一个创建于 2817 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言    2018-01-24 13:11:01 +08:00
    已经发现是死循环了,与 sleep1 没关系。
    但死循环的原因还不清楚,条件是 while ! test -e /dev/ttyUSB0
    这个设备明明是存在的,代码复制出来运行可以的
    第 2 条附言    2018-01-25 09:07:48 +08:00
    已经找到原因是另一个地方的死循环 while test -e /dev/ttyUSB0,按理说我先重置掉 /dev/ttyUSB0 会没有,但不知道为什么变成存在的,导致了死循环。
    不管怎样,吸取的教训就是不能写死循环,设置一定的超时时间
    koebehshian
        1
    koebehshian  
    OP
       2018-01-24 10:44:24 +08:00
    ikw
        2
    ikw  
       2018-01-24 11:14:47 +08:00   1
    你试试 kill 了它,看是不是会变成 defunc...
    koebehshian
        3
    koebehshian  
    OP
       2018-01-24 11:24:42 +08:00
    @zwpaper 你说 kill 哪个进程,sleep 1 的父进程爷进程都在的
    Beebird
        4
    Beebird  
       2018-01-24 11:28:10 +08:00   1
    楼主的意思是 sleep 1 这个进程会长时间运行,无法结束?
    单看这一张截图,没有任何异常。
    koebehshian
        5
    koebehshian  
    OP
       2018-01-24 11:34:12 +08:00
    @Beebird 是啊,sleep 1 这个进程,按理说 1 秒后就自杀了,为什么还在吗,我在 resetgpio25.sh 脚本中调用的,等它 sleep 完我还要重启应用服务,结果它这卡住了,导致我的服务都没启动
    shn7798
        6
    shn7798  
       2018-01-24 11:50:08 +08:00
    可能是当前目录 IO busy 导致的, 试试(cd /; sleep 1)
    ikw
        7
    ikw  
       2018-01-24 11:54:09 +08:00
    @koebehshian #3 #3 kill sleep 1 这个,14527
    pkookp8
        8
    pkookp8  
       2018-01-24 11:54:21 +08:00 via Android   1
    父进程和 sleep 的进程号差那么多,是不是死循环 sleep 了
    koebehshian
        9
    koebehshian  
    OP
       2018-01-24 12:10:57 +08:00
    @pkookp8 没有啊,我复制出来前台运行可以的
    koebehshian
        10
    koebehshian  
    OP
       2018-01-24 12:12:42 +08:00
    @shn7798 这和目录有什么关系,sleep 没有调用任何当前目录的资源
    Beebird
        11
    Beebird  
       2018-01-24 13:00:29 +08:00
    把 sleep 1 注释掉试试看? @koebehshian
    koebehshian
        12
    koebehshian  
    OP
       2018-01-24 13:07:37 +08:00
    @pkookp8 刚发现 sleep1 的进程 id 在变化,看来确实是死循环了,但不知道为什么死循环,代码我复制出来运行可以的,我的死循环是用 test -e 检测 /dev 目录下的设备。
    weyou
        13
    weyou  
       2018-01-24 15:08:55 +08:00
    ! test -e /dev/ttyUSB0 是什么鬼?
    !是 test 的参数啊
    试试
    while test ! -e /dev/ttyUSB0
    Beebird
        14
    Beebird  
       2018-01-24 16:32:30 +08:00
    是类似这样的吗?@koebehshian

    #!/bin/bash
    echo "starting"
    while [ ! -e /dev/ttyUSB0]; do
    echo "not exsiting"
    done
    sleep 1
    echo "finishing"

    执行的 shell 是 bash 还是其他 shell?
    koebehshian
        15
    koebehshian  
    OP
       2018-01-25 09:08:09 +08:00
    @weyou 我试过两种都行
    koebehshian
        16
    koebehshian  
    OP
       2018-01-25 09:14:21 +08:00
    @Beebird 不是,我 sleep1 会在循环里面,有两个循环,我先通过 gpio 把设备关了,然后一个死循环,等它没了;然后再开,再一个死循环等它出现。
    我原来以为是后面那个死循环,其实是前面那个死循环。
    语法问题就简单多了,我手动运行过没语法问题.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5184 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 09:31 PVG 17:31 LAX 02:31 JFK 05:31
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86