터미널에서 백그라운드로 프로그램 실행


136

쉘을 백그라운드에서 실행하고 프로그램을 실행하면서 쉘을 닫을 수있는 방법은 무엇입니까? 내 UI에 문제가 있거나 어떤 이유로 든 터미널 창에서 프로그램을 부팅해야합니다 nm-applet.

nm-applet

시작되면 터미널 창의 전경을 차지합니다.

터미널을 열어 두거나 터미널 전체를 차지할 필요없이 백그라운드에서 프로그램을 실행하는 간단한 방법이 있습니까?

그 메모에서 터미널에서 프로그램을 실행하고 앰퍼샌드 ( &)를 명령 에 추가하여 다른 입력을 허용하는 방법을 찾았습니다 .

nm-applet &

그러나 일단 터미널에서 시작된 프로세스가 일단 터미널이 닫히면 종료되므로 사용되지 않습니다.                                                                        


7
nohup 'command'& 이것은 작동하는 것 같습니다. 이것에 문제가 있습니까?
OVERTONE

답변:


173

나는 최근에 좋아했다 setsid. 터미널에서 무언가를 실행하는 것처럼 보이지만 연결을 끊고 (터미널을 닫을 수 있음) 계속 진행됩니다.

명령이 실제로 분기되어 입력이 현재 터미널로 전달되는 동안 완전히 다른 부모 (터미널을 닫은 후에도 계속 유지됨)가 소유하기 때문입니다.

예를 들면 :

setsid gnome-calculator

또한 disown현재 트리에서 프로세스를 분리하는 데 사용할 수있는 부분적 입니다. 백그라운드 앰퍼샌드와 함께 사용하십시오.

gnome-calculator & disown

또한 괄호로 서브 쉘을 생성하는 방법에 대해서도 배웠습니다. 이 간단한 방법이 작동합니다.

(gnome-calculator &)

물론 nohup언급했듯이 나 에게 묻지 않고 nohup글을 쓰는 경향이 있기 때문에 나는 열광적이지 않다 ~/nohup.out. 당신이 그것에 의존한다면 그것은 당신을위한 것일 수도 있습니다.

nohup gnome-calculator

그리고 장기 프로세스의 경우 screen연결간에 세션을 유지하는 것과 같은 가상 터미널 멀티플렉서와 같은 것들이 있습니다. 터미널 출력에 일시적으로 액세스하기를 원하기 때문에 실제로 적용되지는 않지만 나중에 시간을 되돌리고 최신 터미널 활동을 보려면 화면이 최선의 선택 일 것입니다.

인터넷은 screen튜토리얼 로 가득 차 있지만 간단한 빠른 시작이 있습니다.


Oli, DISPLAY = : 0 unity 의 경우 위의 어느 것을 사용하고 왜 대체 합니까?
natty에 대해 nutty

4
@nuttyaboutnatty는 자체 로트 세션에서 전체 로트를 래핑합니다 sh -c "sleep 10s && cvlc '/home/omm.ogg'" & disown. 그것은 모든 것이 제대로 포크되도록하기위한 거의 모든 솔루션입니다.
Oli

1
@nuttyaboutnatty 이것이 의미하는 바이지만 --replace실제로는 이전 인스턴스를 끝내고 끝내기 때문에 두 개의 인스턴스가 실행 되지 않습니다. xsession 내에서 두 번째로 실행하면 TTYn에 바인딩 된 사본이 종료되고 나중에 필요할 경우 사용할 수 있습니다. 아마도 더 좋은 방법이 있지만 필요할 때마다 내 마음에 오는 것이 있습니다.
Oli

1
완벽하게 저에게 도움이 된 것은 서브 쉘 '(gnome-calculator &)'였습니다. 백그라운드에서 모노 콘솔 앱을 시작하는 데 사용합니다. 다른 기술을 사용하면 모노 앱이 즉시 중단됩니다.
Nikolaos Georgiou

2
미래의 사용자에게 참고 : 생성 nohup.outstdout 및 sterr 모두 리디렉션으로 억제 할 수가 /dev/null너무 좋아 :nohup firefox &> /dev/null &
세르지 Kolodyazhnyy

55

내가 갈 두 가지 방법이 있습니다. 첫째, 터미널에서 실행하지 않습니다. 히트 Alt+ F2실행 대화 상자를 열고 거기에서 (없이 &)를 실행합니다.

터미널에서 실행

nm-applet &

그러나 터미널을 직접 닫지 마십시오. 즉, X 단추를 눌러 닫지 말고 메뉴 표시 줄에서 파일-> 종료를 사용하지 마십시오. 그런 식으로 터미널을 닫으면 HUP (Hang UP) 신호가 내에서 실행되는 bash에 전송되고 HUP 신호가 모든 자식에게 전송됩니다 (이 경우 nohup이 작동하는 이유).

대신 + 를 실행 exit하거나 쳐서 쉘을 종료하십시오 . bash는 자식을 제거하고 종료하고 백그라운드 프로세스를 계속 실행합니다. bash가 종료되면 터미널은 자식 프로세스를 잃어 버렸으므로 닫힙니다.CtrlD

한 번에 모두 수행 :

nm-applet & exit

그 놀라운! 그것을 결코 알지 못했고 당신은 이것을 언급 할 유일한 사람인 것 같습니다. 데스크탑 환경에서 가장 좋아하는 접근 방식입니다. 너무 나쁘게 더 이상
투표를

다른 응용 프로그램으로 시도했지만 실패했습니다. matlab & exit두 개의 개별 명령으로 실행하면 효과가있었습니다.matlab & exit
MattKelly

OP가 터미널을 닫으면 백그라운드 프로그램이 중단되는 이유가 궁금합니다. 창에서 "x"버튼으로 터미널을 닫은 적이 없습니다.
user1717828

x 버튼이 종료되면 완전히 종료되지 않고 종료 명령이 종료됩니다. 대신 x 버튼을 종료 명령으로 다시 매핑 할 수 있습니다.
Tim Baker

14

당신이 지적했듯이, 당신은 실행할 수 있습니다

nohup nm-applet &  

터미널을 닫을 때 종료 신호를 무시합니다. 아무 문제 없습니다.


다른 대안이 있습니까? 지식을 위해서만, 다른 것은 아닙니다
OVERTONE

wikipedia ( en.wikipedia.org/wiki/Nohup )에는 사용할 echo command | at now수없는 제안이 있습니다 .
desgua

2
아이콘이나 프로그램을 두 번 클릭하면 UI에서 어떻게 작동하는지 궁금합니다.
오버톤

execnohup <command> &백그라운드에서 프로세스를 실행하고 현재 쉘 프롬프트를 리턴 하기 위한 대안을 제공 합니다.
JSStuball

12

다른 많은 답변이 누락 된 한 가지는 현재 쉘을 차단하는 실행중인 프로세스를 분리하는 방법입니다. 대부분의 터미널과 쉘에서 Ctrl+ Z는 실행중인 프로세스를 중단하고 입력 프롬프트로 돌아갑니다. 그런 다음 발행 할 수 있습니다

bg

실행중인 프로세스를 백그라운드로 보냅니다. 발행물

fg

대신 실행중인 프로세스를 다시 포 그라운드로 넣으십시오.

편집 : 이 답변에 대한 자세한 내용은 나중에 발견했습니다.


7

(exec PROGRAM &> /dev/null & )서브 쉘의 PID가에 의해 인계되도록 하려면 사용하십시오 PROGRAM. 여러 가지 다른 프로그램으로이 방법을 여러 번 테스트했습니다. 원래 터미널을 닫아도 새로 생성 된 프로그램에는 영향이 없습니다.

작은 데모 :

$ # this is before running
$ (exec firefox &> /dev/null &)
$ # and look, we still in side the terminal and can continue working

Hmmm (exec firefox)은 파이어 폭스를 종료 할 때까지 터미널을 멈추고 터미널을 닫으면 쉘과 서브 쉘을 SIGHUP합니다
kos

내 답변을 편집했습니다. 다른 여러 프로그램으로 테스트했습니다. 이 버전에서는 파이어 폭스 나 다른 프로그램이 제어 터미널에 매달려있는 것을 보지 못했습니다.
Sergiy Kolodyazhnyy

나를 위해 잘 작동
Zanna

bash의 exec를 사용해야한다고 생각하지 않습니다. 어떤 이유로 PID가 필요할 수 있습니다.
마리 나라

2

Byobu 터미널을 추천 할 수 있습니다. F6 키를 누르면 프로세스를 쉽게 분리 할 수 ​​있습니다.


1

위의 좋은 대답이 있지만 백그라운드에서 MATLAB을 사용하는 방법에 대해 2 센트를주고 싶습니다.

sudo -b matlab

-bsudo는의 태그 백그라운드에서 응용 프로그램을 실행할 수 있습니다. 이 명령을 실행 한 후 터미널을 닫을 수도 있습니다.

아마도 관련이 없지만 쉘 명령을 설명하는 데 사용할 수있는 훌륭한 웹 사이트가 있습니다. http://explainshell.com/explain/8/sudo


0

올바른 방법을 모르겠지만 이전 세션을 떠나면서 다른 세션을 시작합니다. 예를 들어 라즈베리에서 간단한 웹 서버를 실행했습니다. web.py 하나. 그런 다음 새 세션을 시작하면서 그대로 둡니다. 그게 다야. 다른 세션에서 작업하더라도 여전히 업데이트되므로 wuite가 유용합니다.


2
Ask Ubuntu에 오신 것을 환영합니다! 이 작업을 수행하는 방법에 대한 특정 세부 정보로 확장 하려면 이 답변을 편집 하는 것이 좋습니다 . Ask Ubuntu에서 어떤 종류의 답변이 가장 가치있는 것으로 간주되는지에 대한 일반적인 조언은 좋은 답변을 작성하는 방법 도 참조하십시오 .
David Foerster

0

KDE를 사용하는 경우을 사용 kstart하여 터미널에서 프로그램을 분리 할 수 있습니다 . 또한 KDE 환경이 명령에 대해 올바르게 설정되어 있는지 확인하십시오. (참조 kstart.cpp참조 용 소스 코드를 . 당신이 거기에서 볼 때, 그것을 사용 KProcess::startDetached하고, KProcess에서 파생 QProcess하고, startDetached새로운 프로세스를 시작하고 그것에서 분리합니다.)

kde-open또는 xdg-open또는 유사합니다 gnome-open.


이것이 의미하는 것처럼, 그것은 대답보다 주석과 거의 비슷합니다. 확장 하려면 수정 하십시오 . 하나의 라이너 만 제공하지 마십시오. 이상적으로 인용문으로 왜 옳은지를 설명하십시오. 설명이없는 답변은 제거 될 수 있습니다.
anonymous2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.