Distributions
› Ubuntu
› Fedora
› CentOS
中文资源站
› 网易开源镜像站
koebehshian
V2EX  ›  Linux

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

  •  
  •   koebehshian · Jan 24, 2018 · 7023 views
    This topic created in 3213 days ago, the information mentioned may be changed or developed.
    Supplement 1  ·  Jan 24, 2018
    已经发现是死循环了,与 sleep1 没关系。
    但死循环的原因还不清楚,条件是 while ! test -e /dev/ttyUSB0
    这个设备明明是存在的,代码复制出来运行可以的
    Supplement 2  ·  Jan 25, 2018
    已经找到原因是另一个地方的死循环 while test -e /dev/ttyUSB0,按理说我先重置掉 /dev/ttyUSB0 会没有,但不知道为什么变成存在的,导致了死循环。
    不管怎样,吸取的教训就是不能写死循环,设置一定的超时时间
    koebehshian
    koebehshian
    OP
    Jan 24, 2018
    1
    ikw
    ikw
    Jan 24, 2018❤️1
    2
    你试试 kill 了它,看是不是会变成 defunc...
    koebehshian
    koebehshian
    OP
    Jan 24, 2018
    3
    @zwpaper 你说 kill 哪个进程,sleep 1 的父进程爷进程都在的
    Beebird
    Beebird
    Jan 24, 2018❤️1
    4
    楼主的意思是 sleep 1 这个进程会长时间运行,无法结束?
    单看这一张截图,没有任何异常。
    koebehshian
    koebehshian
    OP
    Jan 24, 2018
    5
    @Beebird 是啊,sleep 1 这个进程,按理说 1 秒后就自杀了,为什么还在吗,我在 resetgpio25.sh 脚本中调用的,等它 sleep 完我还要重启应用服务,结果它这卡住了,导致我的服务都没启动
    shn7798
    shn7798
    Jan 24, 2018
    6
    可能是当前目录 IO busy 导致的, 试试(cd /; sleep 1)
    ikw
    ikw
    Jan 24, 2018
    7
    @koebehshian #3 #3 kill sleep 1 这个,14527
    pkookp8
    pkookp8
    Jan 24, 2018 via Android❤️1
    8
    父进程和 sleep 的进程号差那么多,是不是死循环 sleep 了
    koebehshian
    koebehshian
    OP
    Jan 24, 2018
    9
    @pkookp8 没有啊,我复制出来前台运行可以的
    koebehshian
    koebehshian
    OP
    Jan 24, 2018
    10
    @shn7798 这和目录有什么关系,sleep 没有调用任何当前目录的资源
    Beebird
    Beebird
    Jan 24, 2018
    11
    把 sleep 1 注释掉试试看? @koebehshian
    koebehshian
    koebehshian
    OP
    Jan 24, 2018
    12
    @pkookp8 刚发现 sleep1 的进程 id 在变化,看来确实是死循环了,但不知道为什么死循环,代码我复制出来运行可以的,我的死循环是用 test -e 检测 /dev 目录下的设备。
    weyou
    weyou
    Jan 24, 2018
    13
    ! test -e /dev/ttyUSB0 是什么鬼?
    !是 test 的参数啊
    试试
    while test ! -e /dev/ttyUSB0
    Beebird
    Beebird
    Jan 24, 2018
    14
    是类似这样的吗?@koebehshian

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

    执行的 shell 是 bash 还是其他 shell?
    koebehshian
    koebehshian
    OP
    Jan 25, 2018
    15
    @weyou 我试过两种都行
    koebehshian
    koebehshian
    OP
    Jan 25, 2018
    16
    @Beebird 不是,我 sleep1 会在循环里面,有两个循环,我先通过 gpio 把设备关了,然后一个死循环,等它没了;然后再开,再一个死循环等它出现。
    我原来以为是后面那个死循环,其实是前面那个死循环。
    语法问题就简单多了,我手动运行过没语法问题.
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   993 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 22:13 · PVG 06:13 · LAX 14:13 · JFK 17:13
    ♥ Do have faith in what you're doing.