2017-04-15 1 views
0

私は、実行したいものをいくつか選択するよう促すメニュープログラムを作成しました。問題は、 バックグラウンドでプロセスを実行するオプション「b」を持っていなければならないということです。例えば のメニューを手に入れて、 バックグラウンドジョブが実行中に他の選択を行うことができます。私はバックグラウンドで実行する必要がどのプロセスが混乱している私の教授の例では、彼は睡眠を使用すると言うが、私はそれを私の場合に入れて私は正しい結果を持っていないと言う。BASHを使用して作成したメニュープログラムでバックグラウンドプロセスを実行するにはどうすればよいですか?

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 

のでヤオールの一部を把握するために、これはおそらく、簡単ですが、私はプログラミングに新たなんだと私は地獄のように混乱しています。私がプログラムを実行すると、最初の3つの選択肢はうまく実行され、chkファイルは機能しません。表示する日付は取得できませんが、もっと重要なのはバックグラウンドプロセスが機能していないことです。私はプロセスやバックグラウンドの仕事を誤解していると思うので、私が間違っていることについて何か助けや説明をしていただければ幸いです。また、ここでは駄目のようなコードを残して申し訳ありませんが、私は実際に画面からコードを一枚の記事にする方法をマスターしていません。 `

+0

オプション 'b'の後に10秒遅れているのが本当に分かりましたか?そこにいくつかのデバッグ行を追加したいかもしれません: 'ps -ef | grep "スリープ10";スリープ4 '。 'clear'は関連情報を消去し(' command not found')、 'clear'なしでデバッグするかもしれません。 –

+0

私はこのお尻を後ろ向きに考えていましたが、もう一度私はこのすべてに慣れていますので、私を助けて、私の明らかに愚かな質問をしていただきありがとうございます。ええ、もちろん、バックグラウンドで10秒間寝ると、それを見ることはできません! DUH!私は新しいシェルを選ぶことを可能にする別のオプションをメニュープログラム上に作りました。新しいシェルを選ぶと、それは起動し、私が新しいシェルを始める前に私はバックグラウンドで20秒間スリープする "b"私は 'ps'して、睡眠がまだ動いているのを見ることができます。だから私はあなたのおかげでそれを理解した。 – Ooobunwhoubuntu

答えて

0
  • ませ引数は、それが通常の* nixのツールだ場合にはEOF(CTRL-D)に続いて、いくつかの入力を無期限に待機することを意味しchkに渡されません。読み込むために引数を追加することができます。
  • sleepは、あなたがそれがバックグラウンドで実行されている見たいので、もしあなたが別の端末を開き、プロセスリストで探してください、何も表示されません:

    ps wafux | less 
    

    (あなたがlessで検索することができます自分自身のプロセスを見てのより良い機会を与えるために、このような

  • sleep単にあなたの正規表現が続い/を押すことによって、あなたはsleep 1000sleep 1dまたは類似のものに変更することができます。 sleepプロセスを稼動させるために必要なリソースは無限に少ないので、積み重ねる心配はありません。
+0

申し訳ありませんが、私はchkプログラムを作成したことを明確にし、ファイルが存在するかどうかを確認し、ファイルが存在すれば、プログラムはcatをファイルにプリフォームして画面に出力します。ヘルパーprogrammin(私が取り組んでいるメニュープログラム)の外で 'chk pizza'を実行するとうまくいきますが、chkを選択肢Cに入れても何も返されません。私はより長い睡眠を試みます!ありがとうございます – Ooobunwhoubuntu

+0

メニューを 'chk pizza'または' read -p "に変更してください。 chk "$ {file}" '。 –

+0

さて、私はこれを試してみるつもりですが、私は睡眠が本当にやったことをちょっと混乱させました。そして今、私は睡眠をバックグラウンドプロセスとして実行している間に何かが画面に表示されるのを期待して馬鹿だと感じます:/とにかく、どのように私は仕事に 'チャク'を得るだろうが、私はあなたに感謝のためにここで何をしようとします! – Ooobunwhoubuntu

0

OPは、私のコメントを見て、それが問題だったことに合意:

あなたがバックグラウンドにsleepコマンドを入れると、気づくのは難しいです。
起動後すぐに見つかるか、別の端末で見てみることができます。 sleep 118のように、より長い睡眠のコマンドが見つけやすくなります。

関連する問題