如何在使用BASH创建的菜单程序中运行后台进程?

时间:2017-04-15 16:54:00

标签: bash background-process

所以,我已经创建了一个菜单程序,它会提示您选择要执行的内容。麻烦的是,我必须选择" b"运行一个进程 背景,长时间睡眠,所以你得到菜单 马上回来,可以做其他选择 后台工作正在运行。我很困惑我应该在后台运行什么过程,在我的教授的例子中他说使用睡眠但是当我把它放到我的情况下我不能得到正确的结果

while [ true ]
do
    clear
    cat <<EOF

                        M A I N   M E N U
                       ========= =========

                                          $(date)
                        l> -- List all file names in current directory
                        o> -- sign on this session
                        f> -- sign off this session
                        c> -- check if a file exists and view its contents
                        b> -- background job
                        s> -- interactive shell
                        d> -- shows date

                        q> -- quit

                        Please choose....or else..
   EOF
   read ans

   case $ans in

        l) ls -a
           sleep 2
           ;;
        o) signon
           ;;
        f) signoff
           ;;
        c) chk
           sleep 2
           ;;
        b) sleep 10 &
           ;;
        d) date
           ;;
        q) break
           ;;
    esac
done

所以这可能很容易让一些人明白,但我对编程很陌生,我很困惑。当我运行程序时,前三个选项执行得很好,我的chk文件无法正常工作,我无法显示日期,但更重要的是后台进程似乎无法正常工作。我认为我误解了整个流程和后台工作,所以对我做错的任何帮助或进一步解释都将不胜感激!此外,抱歉代码看起来像垃圾在这里,我还没有真正掌握如何从我的屏幕到一个部分的帖子的代码。 `

2 个答案:

答案 0 :(得分:0)

  • 没有参数传递给chk,如果它是正常的* nix工具,则意味着它将无限期地等待一些输入,然后是EOF( Ctrl-d )。您可能想要为其添加一个参数来阅读。
  • sleep没有显示任何内容,所以如果你想看到它在后台运行,你应该打开另一个终端并在进程列表中查找它:

    ps wafux | less
    

    (您可以在less中按/,然后按正则表达式进行搜索,例如sleep}

  • 为了让自己更有机会看到这个过程,您可以将其更改为sleep 1000sleep 1d或类似内容。它需要极少量的资源来保持sleep进程运行,所以不要担心它们会堆积起来。

答案 1 :(得分:0)

OP看到了我的评论并同意这是问题所在:

当您将sleep命令放到后台时,很难注意到 您可以尝试在启动后找到它,或者查看另一个终端。可以更轻松地找到睡眠时间较长的命令,例如sleep 118