쉘 프롬프트에 백그라운드 작업 추가
백그라운드 프로세스
시간이 걸리는 명령을 실행할 때마다 time 명령이 끝날 때까지 프롬프트가 표시되지 않습니다. 예를 들어
sleep 5s
를 실행하면 쉘은 5초 동안 아무 작업도 하지 않고 명령( sleep
)이 끝날 때까지 기다립니다. 5초 후에 프롬프트가 다시 표시됩니다.많은 경우 명령은 처리가 완료될 때까지 기다릴 가치가 없습니다. 예를 들어 프로젝트를 컴파일할 때 완료하는 데 약 1분이 걸립니다. 명령 끝에
&
를 사용하여 백그라운드에서 빌드를 실행할 수 있으며 백그라운드 작업이 완료되면 알림을 받게 됩니다.chinmay@CC-T480:~$ sleep 5 &
[1] 3683711
chinmay@CC-T480:~$ # After 5 seconds when we press Enter
[1]+ Done sleep 5
chinmay@CC-T480:~$
여기서 우리가 한 일은
sleep 5
작업을 백그라운드에 두었고 백그라운드 프로세스 ID는 3683711
입니다. 새 명령을 입력할 때 5초 이상 후에 Enter 키를 누르면 sleep 5
를 보고 백그라운드 작업Done sleep 5
이 완료된 것을 볼 수 있습니다.프로젝트를 빌드할 때 백그라운드에서 빌드 프로세스를 보낼 수 있고 완료될 때까지 기다리는 동안 다른 작업을 수행할 수 있습니다.
make
를 사용하여 프로젝트를 빌드하고 완료하는 데 약 1분이 걸린다면 make >/dev/null 2>&1 &
를 사용하여 백그라운드에서 빌드하고 정보/오류 로그를 표시하지 않고 쉘 프롬프트를 사용하여 다른 명령을 제공할 수 있습니다.Ctrl-Z
를 눌러 프로세스를 중지할 수도 있으며 이 작업도 백그라운드로 전송됩니다. 그러나 이 경우 작업은 백그라운드에서 실행되지 않고 동일한 터미널에서 명령fg
으로 재개될 때까지 중지됩니다. 명령jobs
으로 백그라운드 작업을 볼 수 있습니다.03:26:34 $ sleep 10
^Z
[1]+ Stopped sleep 10
03:26:36 $ jobs
[1]+ Stopped sleep 10
03:26:38 $ fg
sleep 10
03:26:45 $ jobs
03:26:47 $
작업을 백그라운드로 보내는 또 다른 일반적인 용도는
vim
또는 기타 터미널 기반 편집기를 사용하는 동안입니다. 터미널에서 일부 명령을 실행해야 할 때 일반 모드에서 ctrl-z
를 누르면 vim
중지됩니다. 이런 식으로 우리는 명령을 실행하기 위한 터미널 프롬프트를 가질 수 있습니다. 터미널 작업이 끝나면 vim
명령으로 fg
로 다시 전환할 수 있습니다.프롬프트 설정
Bash prompt can be set by setting the environment variable PS1
. We will update this variable to get number of background jobs in our prompt.
If we see manual page for bash
, we can see that it says we can use \j
to show number of jobs
\j the number of jobs currently managed by the shell
But most of the times we have 0 jobs running in background and displaying a 0 every time is not so tidy approach.
We can use a simple bash command to print the jobs in the prompt if they are more than 0.
[ \j -gt 0 ] && echo \j
Here \j
is the number of background jobs. What we are doing is checking if it's greater than 0, if yes, then print ( echo
) in the prompt else not.
A simple shell prompt including the current directory and number of background processes can be like
chinmay@CC-T480:~/Downloads$ PS1="\w\$([ \j -gt 0 ] && echo [\j]) $ "
~/Downloads $ sleep 10
^Z
[1]+ Stopped sleep 10
~/Downloads[1] $ sleep 15
^Z
[2]+ Stopped sleep 15
~/Downloads[2] $ vi
[3]+ Stopped vi
~/Downloads[3] $ jobs
[1] Stopped sleep 10
[2]- Stopped sleep 15
[3]+ Stopped vi
~/Downloads[3] $ fg 2
sleep 15
~/Downloads[2] $ fg 1
sleep 10
~/Downloads[1] $ fg
vi
~/Downloads $
Here the number of background processes will be listed inside square brackets.
Checkout .
Reference
이 문제에 관하여(쉘 프롬프트에 백그라운드 작업 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/chhajedji/background-jobs-add-to-your-shell-prompt-3eg2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)