2017-04-15 3 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 

그래서 이것은 yall의 일부가 알아 내기가 쉽지만 프로그래밍에 익숙하지 않고 지옥처럼 혼란 스럽습니다. 프로그램을 실행하면 처음 세 가지 선택이 잘 실행되고, chk 파일은 제대로 작동하지 않으며, 나타나는 날짜는 표시되지 않지만 더 중요한 것은 배경 프로세스가 작동하지 않는 것입니다. 나는 내가 프로세스와 배경 작업을 오해하고 있다고 생각하여 내가하는 일에 대한 도움이나 추가 설명이 크게 감사 할 것입니다! 또한, 여기에 쓰레기 같이 보이는 코드에 대해 유감스럽게 생각합니다. 실제로 화면에서 코드를 한 조각으로 가져 오는 방법을 마스터하지 않았습니다. `

+0

'b'옵션 다음에 실제로 10 초 지연이 발생 했습니까? 디버그 라인을 추가 할 수도 있습니다 :'ps -ef | grep "수면 10"; sleep 4'. 'clear'는 관련 정보를 지우고 ('command not found'),'clear'없이 디버그 할 수 있습니다. –

+0

그래서 나는이 엉덩이에 대해 거꾸로 생각하고 있었고, 다시이 모든 것을 처음 접했기 때문에 나를 도와주고 분명히 어리석은 질문을 해 주셔서 감사합니다. 그래, 물론, 내가 백그라운드에서 10 초 동안 잠을 자면 나는 그것을 볼 수 없을거야 !! 젠장! 나는 새로운 쉘을 선택할 수있는 또 다른 옵션을 메뉴 프로그램에 만들었고, 새로운 쉘을 선택했을 때 새로운 쉘을 시작하기 전에 백그라운드에서 20 초 동안 sleep을 실행하는 "b"를 선택했다고 가정했다 , 나는 'ps'할 수 있고, 잠이 아직도 달리고있는 것을 안다. 그래서 나는 너에게 감사의 말을 전했다. – Ooobunwhoubuntu

답변

0
  • 없음 인수, chk에 전달되지 않는 것이 보통 * nix에서 스크립트 도구는 EOF (Ctrl-D를) 다음 몇 가지 입력을 무한정 기다릴 것이라는 점을 의미 할 것입니다 경우. 읽을 수 있도록 인수를 추가 할 수 있습니다.

    ps wafux | less 
    

    (당신이 less에서 검색 할 수 있습니다 : 당신이 백그라운드에서 실행 다른 터미널을 열고 프로세스 목록에서 찾아야보고 싶다면

  • sleep는 아무것도 표시되지 않습니다 자신에게 과정을 보는 더 나은 기회를 제공하는 등

  • ) sleep 간단하게 정규 표현식 다음 /을 누르면, 당신은 sleep 1000, sleep 1d 또는 유사한 것으로 변경할 수 있습니다. sleep 프로세스를 계속 실행하는 데 소량의 리소스가 필요하므로 누적 될 염려는하지 마십시오.
+0

죄송합니다. 나는 chk 프로그램을 만들었고, 파일이 존재하는지 확인하고, 파일이 존재하면 프로그램이 파일에 cat을 preform하고 화면에 출력하는지 확인해야합니다. 내가 'chk 피자'도우미 programmin (내가 일하는 메뉴 프로그램) 밖에서 실행하면 잘 작동하지만 chk를 선택 항목으로 넣을 때 나는 아무것도 얻지 못한다. 나는 더 긴 잠을 시도 할 것이다! 고마워요 – Ooobunwhoubuntu

+0

그래서 메뉴를'chk pizza' 또는'read -p "로 바꿉니다."file; chk "$ {file}"'. –

+0

좋아, 나는 이것을 시도 할 것이다, 나는 잠이 정말로 한 일에 약간 혼란 스러웠다. 그리고 지금 나는 배경 프로세스로 수면을 실행하는 동안 내 화면에 인쇄 된 것을 볼 것을 기대하면서 어리 석었다./어쨌든, 나는 여전히 내가 'chk'를 일하게하는 방법에 난처하게 굴지 만, 나는 당신이 나를 위해 여기있는 것을 시도 할 것이다! – Ooobunwhoubuntu

0

영업 이익은 내 댓글을보고이 문제라고 동의 : 당신이 배경에 sleep 명령을 넣을 때

, 예고하기 어렵다.
시작한 후 잠시 후에 찾거나 다른 단말기로 살펴볼 수 있습니다. sleep 118과 같이 더 긴 수면 시간을 가진 명령을 쉽게 찾을 수 있습니다.