& 명령 뒤의 "완료" 메시지는 즉시 표시되지 않고 사용자 작업 후에 표시됩니다. 왜?

& 명령 뒤의 "완료" 메시지는 즉시 표시되지 않고 사용자 작업 후에 표시됩니다. 왜?

작업을 실행했는데 sleep 3 &"완료" 메시지가 ps콘솔이 아닌 명령의 일부로 나타났습니다. 반드시 그런 것은 아닙니다 ps. 완료되는 모든 명령은 sleep끝에 "완료" 메시지와 함께 추가 줄이 있습니다. 왜 그런 겁니까?

운영 체제는 centos-7.0이며 vagrant를 통해 다운로드됩니다.

[vagrant@localhost ~]$ sleep 3 &
[1] 2838
[vagrant@localhost ~]$ ps
  PID TTY          TIME CMD
 1871 pts/0    00:00:00 bash
 2838 pts/0    00:00:00 sleep
 2840 pts/0    00:00:00 ps
[vagrant@localhost ~]$ ps
  PID TTY          TIME CMD
 1871 pts/0    00:00:00 bash
 2841 pts/0    00:00:00 ps
[1]+  Done                    sleep 3
[vagrant@localhost ~]$

이렇게 하면 ls > ls.txt"완료" 메시지가 파일로 이동하지 않습니다. 콘솔에 표시됩니다. 3초 후에 Enter를 누르면 메시지가 나타납니다. 일종의 캐시에 있습니까? 무슨 일이야?

답변1

man bash설명하다:

   The  shell  learns immediately whenever a job changes state.  Normally,
   bash waits until it is about to print a prompt before reporting changes
   in  a  job's status so as to not interrupt any other output.  If the -b
   option to the set builtin command is enabled, bash reports such changes
   immediately.   Any  trap  on  SIGCHLD  is  executed for each child that
   exits.

답변2

이것"완벽한"메시지는 실행하는 프로세스에 의해 관리되는 것이 아니라 bash자체적으로 백그라운드 작업 종료를 알리기 위한 것입니다. 그렇기 때문에 콘솔 활동이 있을 때 메시지를 제공합니다.

에서는 bash다음을 사용할 수 있습니다.

  • set +mmonitor해당 메시지를 보고 싶지 않으시면 ( ) 삭제해 주세요.
  • set -b( notify) 메시지가 즉시 표시됩니다.

관련 정보