작업을 실행했는데 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 +m
monitor
해당 메시지를 보고 싶지 않으시면 ( ) 삭제해 주세요.set -b
(notify
) 메시지가 즉시 표시됩니다.