咦,我这个自学成才的脚本好像有一点问题

  • 我好像是机修
    如题目。。。。需求是脚本启动程序A之后,当程序A退出之后,电脑关机。
    现在这个脚本,当程序A退出之后,确实会打印关机两个文字,说明关机这个个功能实现了。

    但是为啥延迟时间这几个文字不打印,我想指定多少秒执行一次死循环判断哎?
    难道是死循环里面,不能延迟?




    1. #!/bin/sh

    2. sleep 3

    3. xinit /usr/local/程序A //启动程序

    4. while true // 开启死循环
    5. do
    6. procnum=` ps |grep "程序A"|grep -v grep|wc -l` // 判断程序A进程是否运行
    7. if [ $procnum -eq 0 ]; then //如果程序A进程没有运行就跳出来循环,执行关机重启
    8. break //跳出来循环

    9. fi
    10. sleep 1 //否则延迟一秒钟继续循环判断
    11. echo "延迟时间!" //打印

    12. done

    13. echo "关机"
    复制代码
  • 我好像是机修
    救命啊iOS fly ~
  • l
    liusq96
    shell? 我只用来处理文件iOS fly ~
  • j
    jn13lh
    命令行下直接执行第五行看看。估计在关掉程序a之前。都不会正常退出。就是说下面的脚本就不会被执行。程序a退出后。继续往下执行。。。。就echo 关机了。
  • 汶水西流
    小号向中老年人进发
  • 我好像是机修
    回复4#洪德诚
    也就说我这个需求不用啥死循环判断,直接启动程序后面加一行关机命令就好了?因为脚本执行启动程序之后,就一直停止阻塞在这里,根本没有往下面执行?iOS fly ~
  • 我好像是机修
    回复5#jn13lh
    也就说我这个需求不用啥死循环判断,直接启动程序后面加一行关机命令就好了?因为脚本执行启动程序之后,就一直停止阻塞在这里,根本没有往下面执行?iOS fly ~
  • j
    jn13lh
    回复9#我好像是机修

    理论上应该是这样。问题是程序a意外退出就比较尴尬。。。但你这个脚本本来也没办法防备意外退出。
  • j
    jn13lh
    你要是喜欢看延迟时间几个字。就在程序a后面加个&试试。。。
  • c
    chaos
    关机前多sleep几十秒,万一意外退出还能补救 iOS fly ~