기다리지 않고 명령 실행

기다리지 않고 명령 실행

CLI에서는 때때로 내가 입력하는 명령을 완료하는 데 시간이 걸리며 때로는 그 일이 언제 일어날지 알 수 있습니다. 나는 Linux의 "백그라운드" 등에 대해 약간 혼란스러워합니다.

기다리지 않고 즉시 프롬프트를 반환하고 싶지 않다고 CLI에 알리는 가장 일반적인(또는 사용자 친화적인) 방법은 무엇입니까? 진행률 표시줄이나 바쁜 스피너만 제공된다면 정말 좋을 것 같습니다!

답변1

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

long-running-command &

명령을 시작한 후 다음 을 눌러 CtrlZ명령을 일시 중지하고 bg백그라운드로 전환할 수 있습니다.

long-running-command
[Ctrl+Z]
bg

답변2

프로세스를 백그라운드로 보내는 것 외에도 터미널을 복잡하게 만드는 텍스트 출력에 대해 걱정할 필요가 없기 때문에 이것은 모두가 좋아하는 것입니다.

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

이러한 명령을 사용하면 프로세스 출력을 쉽게 복원할 수 없습니다.해커의 방식으로 수행합니다.

답변3

이것이 당신이 원하는 것일 수도 있습니다

my_command > output.log 2>&1 &

output.log그러면 stdout 및 stderr을 지정할 수 있는 위치 로 리디렉션하는 명령이 시작됩니다 . 출력 저장에 전혀 관심이 없다면 /dev/null실제 파일 대신 사용할 수 있습니다.

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

또한 이와 같은 명령을 실행하면 커널에서 다음과 유사한 확인을 받아야 합니다. [2] 1234 이는 프로세스가 백그라운드에서 실행 중이고 해당 ID가 있으므로 1234원하는 경우 나중에 종료할 수 있음을 의미합니다.kill -9 1234

답변4

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

long_command with arguments > redirection &

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

진행 중인 백그라운드 명령을 표시하는 스피너와 실질적으로 동등한 것은 없지만 jobs백그라운드 명령의 상태를 입력하거나 볼 수 있습니다 jobs -l. 백그라운드 명령과 해당 명령이 실행 중인지, 신호에 의해 중지되었는지(예: 사용 ^Z) 또는 대화형 입력을 기다리기 때문에 가끔 중지되었는지 표시됩니다 .

관련 정보