CLI에서 때로는 입력하는 명령이 완료되는 데 시간이 걸리고 언제 일어날 지 알고 있습니다. 나는 리눅스에서 “배경 화”와 그와 관련하여 약간 혼란스러워합니다.
CLI에게 대기하고 싶지 않다는 가장 일반적인 (또는 사용하기 쉬운) 방법은 무엇인지 즉시 알려주십시오. 그리고 그것이 진행률 표시 줄이나 바쁘게 회전 할 수 있다면 그것은 좋을 것입니다!
답변
명령을 실행하기 전에 &
명령 행에 추가 하여 백그라운드에서 실행할 수 있습니다 .
long-running-command &
명령을 시작한 CtrlZ후을 눌러 일시 중단 한 다음 bg
배경에 넣을 수 있습니다.
long-running-command
[Ctrl+Z]
bg
답변
프로세스를 백그라운드로 보내는 것 외에도 터미널을 더럽히는 텍스트 출력에 대해 걱정할 필요가 없기 때문에 이것이 가장 좋아합니다.
nohup command &
백그라운드에서 프로세스를 실행할뿐만 아니라 로그 ( nohup.out
현재 디렉토리에서 호출 가능하지 않은 경우 홈 디렉토리라고 함)를 생성하고 현재 쉘을 닫거나 로그 아웃해도 하위 프로세스가 수신되지 않도록하여 프로세스가 종료되지 않습니다. 부모는 종료 될 때 신호를 보냅니다 (즉, SIGHUP에 의해 부모에게 로그 아웃하거나 현재 쉘을 닫음).
다른 호출이 disown
있지만 메소드 자체가 아닌 다른 답변의 확장입니다.
command & # our program is in background
disown # now it detached itself of the shell, you can do whatever you want
이러한 명령을 사용하면 프로세스 출력을 해킹하는 방법을 사용 하지 않는 한 프로세스 출력을 쉽게 복구 할 수 없습니다 .
답변
이것은 아마도 당신이 원하는 것입니다
my_command > output.log 2>&1 &
그러면 명령이 시작되어 stdout과 stderr이 모두 지정할 수있는 것으로 리디렉션됩니다 output.log
. 출력을 전혀 저장하지 않아도 /dev/null
되는 경우 실제 파일 대신 사용할 수 있습니다 .
&
백그라운드에서 명령을 실행하여 명령이 실행되는 동안 명령을 계속 입력 할 수 있습니다.
2>&1
모든 출력이 포착되도록 stderr을 stdout으로 리디렉션합니다.
또한 이와 같은 명령을 실행할 때 커널과 비슷한 확인 메시지
[2] 1234
가 표시됩니다. 즉, 프로세스가 백그라운드에서 실행 중이고 해당 id가 1234
인 경우 나중에 원하는 경우 종료 할 수 있습니다kill -9 1234
답변
screen 또는 tmux를 살펴보십시오 . 예를 들면 다음과 tmux
같습니다.
$ tmux new -d 'longrunningcommand'
‘&’를 배경으로 사용하는 다른 답변은 효과가 있지만 stdout (및 stderr!)을 리디렉션해야합니다. 그렇게하지 않으면 출력은 쉘로 바로 가고 다른 출력과 혼합됩니다.
긴 명령을 실행하고 로그 아웃하거나 연결이 끊어지면 백그라운드 작업도 실패합니다. 시스템이 당신의 직업을 죽일 것입니다.
screen 또는 tmux에 익숙하지 않은 경우 기본적으로 쉘에서 완전히 분리 할 수 있습니다. 프로그램을 배경 화하는 대신 전체 쉘을 배경으로합니다. 그런 다음 다른 컴퓨터에서도 나중에 다시 전환 할 수 있습니다. 둘 다이 유스 케이스를 넘어서 유용하거나 찾을 수없는 더 많은 기능을 가지고 있습니다.
스크린은 구식이고 진정한 프로그램입니다. tmux는 훨씬 젊지 만 스크린의 과거에서 배웠습니다.
답변
(완전성을 위해-이미 대답했습니다.) 명령 &
뒤에 다음 을 추가 하여 명령을 백그라운드에 넣습니다 .
long_command with arguments > redirection &
귀하의 질문의 다른 부분을 해결하기 위해이 답변을 추가하고 있습니다.
이 배경 명령에 진행 표시하기위한 회 전자의 실제 동등한은 없다,하지만 당신은 입력하여 배경 명령의 상태를 볼 수 있습니다 jobs
또는 jobs -l
. 백그라운드 명령과 실행 중, 신호를 통해 중지 (예 ^Z
🙂 또는 대화식 입력을 기다리는 중이 어 중지 여부를 표시합니다.
답변
를 사용하여 백그라운드에서 프로그램을 실행할 수 있습니다 &
. 예를 들어, 예를 들어 실행하려는 경우 다음을 실행할 yum install XyZ
수 있습니다.
yum install XyZ &
stdout
프로그램이나 출력을 사용하여 리디렉션 할 수 >
있는 파일을 덮어 쓸 것인지, 또는 >>
파일에 추가 할 수 있습니다. 예를 들어 yum
파일 에 로그인하려면 다음 을 수행하십시오 yum.log
.
yum install XyZ > yum.log &
또는 기존 파일에 출력을 추가하려면 다음을 수행하십시오 log
.
yum install XyZ >> log &
오류는 stderr
및 로 인쇄되고 다음 과 stdout
같은 방법으로 파일로 리디렉션 될 수 있습니다 2>
.
yum install XyZ 2> errors
yum install XyZ 2>> errors
당신이 모두를 리디렉션하고 싶었다면 stderr
과 stdout
, 당신은 사용할 수 있습니다 &>
:
yum install XyZ &> output
yum install XyZ &>> output
답변
&
뒤에 부호 를 붙여서 백그라운드에서 명령을 실행할 수 있습니다 .
예를 들면 다음과 같습니다.
areallylong_command &
백그라운드에서 실행됩니다.
stdout / stderr을 적절한 파일로 리디렉션하여 무언가를 수행하는 동안 터미널에 나타나지 않도록 할 수 있습니다.
자세한 내용은 다음을 참조하십시오 : http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html