기다리지 않고 명령을 실행


145

CLI에서 때로는 입력하는 명령이 완료되는 데 시간이 걸리고 언제 일어날 지 알고 있습니다. 나는 리눅스에서 "배경 화"와 그와 관련하여 약간 혼란스러워합니다.

CLI에게 대기하고 싶지 않다는 가장 일반적인 (또는 사용하기 쉬운) 방법은 무엇인지 즉시 알려주십시오. 그리고 그것이 진행률 표시 줄이나 바쁘게 회전 할 수 있다면 그것은 좋을 것입니다!


3
명령 줄 앱을 백그라운드로 직접 보내는 방법 도 참조하십시오 . 이미 명령을 시작하고 백그라운드로 보내려면
Gilles

답변:


153

명령을 실행하기 전에 &명령 행에 추가 하여 백그라운드에서 실행할 수 있습니다 .

long-running-command &

명령을 시작한 CtrlZ후을 눌러 일시 중단 한 다음 bg배경에 넣을 수 있습니다.

long-running-command
[Ctrl+Z]
bg

"find ~ / a.java &"명령을 사용했지만 백그라운드로 가지 않았습니까? 또한, 나는 cmd + z (Mac 용)를 시도했습니다 .... 작동하지 않습니다
Abhimanyu Aryan

1
@AbhimanyuAryan, find ...명령을 먼저 디버깅 한 다음 백그라운드에서 실행 하고 싶을 수도 있습니다 . 이 경우 -name옵션 이 누락되었습니다 .
Alexis Wilke

113

프로세스를 백그라운드로 보내는 것 외에도 터미널을 더럽히는 텍스트 출력에 대해 걱정할 필요가 없기 때문에 이것이 가장 좋아합니다.

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

이러한 명령을 사용하면 프로세스 출력을 해킹하는 방법을 사용 하지 않는 한 프로세스 출력을 쉽게 복구 할 수 없습니다 .


4
'95 년 이후 Sysadmin. 오늘까지 폐허에 대해 들어 본 적이 없습니다. 감사합니다! 모든 쉘에서 작동하지는 않습니다 (bash, zsh, tcsh를 확인했습니다. tcsh는 작동하지 않았습니다).
yoonix

nohup작업 제어 쉘에서 사용 하는 것은 바보입니다. 현대 쉘은 HUP백그라운드 프로세스로 보내지 않습니다 . 고유 한 파일 이름으로 리디렉션하는 것은 적은 비용입니다.
병아리

@chicks 유스 케이스는 stderr 및 stdout이 자동으로 로그 파일을 작성하는 플러스로 터미널을 오염시키지 않도록하는 것입니다.
Braiam

1
command > file.log 2>&1 & disown보다 조금 길지만 nohup command &@chicks가 제안한 것 같습니다.
joeytwiddle

31

이것은 아마도 당신이 원하는 것입니다

my_command > output.log 2>&1 &

그러면 명령이 시작되어 stdout과 stderr이 모두 지정할 수있는 것으로 리디렉션됩니다 output.log. 출력을 전혀 저장하지 않아도 /dev/null되는 경우 실제 파일 대신 사용할 수 있습니다 .

&백그라운드에서 명령을 실행하여 명령이 실행되는 동안 명령을 계속 입력 할 수 있습니다. 2>&1모든 출력이 포착되도록 stderr을 stdout으로 리디렉션합니다.

또한 이와 같은 명령을 실행할 때 커널과 비슷한 확인 메시지 [2] 1234 가 표시됩니다. 즉, 프로세스가 백그라운드에서 실행 중이고 해당 id가 1234인 경우 나중에 원하는 경우 종료 할 수 있습니다kill -9 1234


2
감사합니다, 2>&1매우 중요한 coz입니다. 명령이 실패하고 경우에 따라 오류를 출력 해보십시오!
ericn

1
이것은 위의 답변이 감사하지 않을 때 효과적이었습니다.
Domagoj

9

screen 또는 tmux를 살펴보십시오 . 예를 들면 다음과 tmux같습니다.

$ tmux new -d 'longrunningcommand'

'&'를 배경으로 사용하는 다른 답변은 효과가 있지만 stdout (및 stderr!)을 리디렉션해야합니다. 그렇게하지 않으면 출력은 쉘로 바로 가고 다른 출력과 혼합됩니다.

긴 명령을 실행하고 로그 아웃하거나 연결이 끊어지면 백그라운드 작업도 실패합니다. 시스템이 당신의 직업을 죽일 것입니다.

screen 또는 tmux에 익숙하지 않은 경우 기본적으로 쉘에서 완전히 분리 할 수 ​​있습니다. 프로그램을 배경 화하는 대신 전체 쉘을 배경으로합니다. 그런 다음 다른 컴퓨터에서도 나중에 다시 전환 할 수 있습니다. 둘 다이 유스 케이스를 넘어서 유용하거나 찾을 수없는 더 많은 기능을 가지고 있습니다.

스크린은 구식이고 진정한 프로그램입니다. tmux는 훨씬 젊지 만 스크린의 과거에서 배웠습니다.


이 답변은 실제 답변을 놓치고 RTFM처럼 들립니다.
Lloeki

5

(완전성을 위해-이미 대답했습니다.) 명령 &뒤에 다음 을 추가 하여 명령을 백그라운드에 넣습니다 .

long_command with arguments > redirection &

귀하의 질문의 다른 부분을 해결하기 위해이 답변을 추가하고 있습니다.

이 배경 명령에 진행 표시하기위한 회 전자의 실제 동등한은 없다,하지만 당신은 입력하여 배경 명령의 상태를 볼 수 있습니다 jobs또는 jobs -l. 백그라운드 명령과 실행 중, 신호를 통해 중지 (예 ^Z:) 또는 대화식 입력을 기다리는 중이 어 중지 여부를 표시합니다.


long_command with arguments &> redirection &를 리디렉션 stderr
아이스 블레이즈에게

3

를 사용하여 백그라운드에서 프로그램을 실행할 수 있습니다 &. 예를 들어, 예를 들어 실행하려는 경우 다음을 실행할 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

당신이 모두를 리디렉션하고 싶었다면 stderrstdout, 당신은 사용할 수 있습니다 &>:

yum install XyZ &> output
yum install XyZ &>> output

2

&뒤에 부호 를 붙여서 백그라운드에서 명령을 실행할 수 있습니다 .

예를 들면 다음과 같습니다.

areallylong_command &

백그라운드에서 실행됩니다.

stdout / stderr을 적절한 파일로 리디렉션하여 무언가를 수행하는 동안 터미널에 나타나지 않도록 할 수 있습니다.

자세한 내용은 다음을 참조하십시오 : http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html


0

장시간 실행되는 작업을 시작하기 전에 'screen'명령을 사용해보십시오. 분리 할 때 다시 필요할 때마다 'screen -r -d'를 사용하여 다시 연결할 수 있습니다. ssh 또는 다른 네트워크 연결을 통해 터미널을 사용할 때 때로는 서버에 대한 연결이 잘못되어 끊어 질 수 있습니다. '스크린'내에서 실행하면이 문제가 해결됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.