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

2018-01-24 10:41:15 +08:00
 koebehshian

ps 命令输出截图

5876 次点击
所在节点    Linux
16 条回复
koebehshian
2018-01-24 10:44:24 +08:00
zwpaper
2018-01-24 11:14:47 +08:00
你试试 kill 了它,看是不是会变成 defunc...
koebehshian
2018-01-24 11:24:42 +08:00
@zwpaper 你说 kill 哪个进程,sleep 1 的父进程爷进程都在的
Beebird
2018-01-24 11:28:10 +08:00
楼主的意思是 sleep 1 这个进程会长时间运行,无法结束?
单看这一张截图,没有任何异常。
koebehshian
2018-01-24 11:34:12 +08:00
@Beebird 是啊,sleep 1 这个进程,按理说 1 秒后就自杀了,为什么还在吗,我在 resetgpio25.sh 脚本中调用的,等它 sleep 完我还要重启应用服务,结果它这卡住了,导致我的服务都没启动
shn7798
2018-01-24 11:50:08 +08:00
可能是当前目录 IO busy 导致的, 试试(cd /; sleep 1)
zwpaper
2018-01-24 11:54:09 +08:00
@koebehshian #3 #3 kill sleep 1 这个,14527
pkookp8
2018-01-24 11:54:21 +08:00
父进程和 sleep 的进程号差那么多,是不是死循环 sleep 了
koebehshian
2018-01-24 12:10:57 +08:00
@pkookp8 没有啊,我复制出来前台运行可以的
koebehshian
2018-01-24 12:12:42 +08:00
@shn7798 这和目录有什么关系,sleep 没有调用任何当前目录的资源
Beebird
2018-01-24 13:00:29 +08:00
把 sleep 1 注释掉试试看? @koebehshian
koebehshian
2018-01-24 13:07:37 +08:00
@pkookp8 刚发现 sleep1 的进程 id 在变化,看来确实是死循环了,但不知道为什么死循环,代码我复制出来运行可以的,我的死循环是用 test -e 检测 /dev 目录下的设备。
weyou
2018-01-24 15:08:55 +08:00
! test -e /dev/ttyUSB0 是什么鬼?
!是 test 的参数啊
试试
while test ! -e /dev/ttyUSB0
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
2018-01-25 09:08:09 +08:00
@weyou 我试过两种都行
koebehshian
2018-01-25 09:14:21 +08:00
@Beebird 不是,我 sleep1 会在循环里面,有两个循环,我先通过 gpio 把设备关了,然后一个死循环,等它没了;然后再开,再一个死循环等它出现。
我原来以为是后面那个死循环,其实是前面那个死循环。
语法问题就简单多了,我手动运行过没语法问题.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/425473

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX