"화면"에서 emacs를 계속 실행하는 방법은 무엇입니까? emacs로 버퍼를 종료하면 프로세스도 종료되나요? [폐쇄]

"화면"에서 emacs를 계속 실행하는 방법은 무엇입니까? emacs로 버퍼를 종료하면 프로세스도 종료되나요? [폐쇄]

일부 R 코드를 실행하기 위해 R 세션을 사용하고 있습니다.

먼저 셸을 열고 screen화면 세션을 시작하기 위해 무언가를 입력한 다음emacs -nw

RR로 시작 해서 다음과 같은 코드를 실행한다고 가정해 보겠습니다 .> source("script.R")

이 세션을 종료하고 이 R 코드를 계속 실행하려면 어떻게 해야 합니까? screen버퍼를 사용하고 종료하면 C-x k세션도 종료되나요?

답변1

emacs가 닫히면 R 프로세스가 종료됩니다. 계속 실행하려면 emacs를 닫지 않고 screen 세션을 분리하세요. 나는 이것이 C-a d기본값이라고 생각합니다.

귀하의 예에서는 먼저 screen터미널에서 엽니다.

screen

그런 다음 emacs를 시작하고 -nw다음을 사용하여 텍스트 모드에서 실행하십시오.

emacs -nw

ESS가 설치되어 있으면 를 통해 M-x RR을 시작하십시오. 셸에서 실행하는 경우(왜? ESS를 사용하세요!) 대신 이 작업을 수행하세요.

지금 분석을 시작해보세요. 예를 들어:

for(i in 1:100){
  Sys.sleep(5)
  print(i)
}

이제 분리된 세션을 사용하십시오 C-a d. 이제 터미널을 닫거나 컴퓨터에서 로그아웃할 수도 있습니다. 하지만 닫지는 마세요! 작업이 어떻게 진행되고 있는지 확인하려면 -r다음 플래그를 사용하여 다른 터미널을 열고 화면을 호출하세요.

screen -r

Emacs 내에서 R 세션이 여전히 실행 중인 것을 볼 수 있습니다:

> Sys.sleep(4)
> for(i in 1:100){
+ Sys.sleep(5)
+ print(i)
+ }
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8

Emacs와 R을 계속 실행하고, 화면을 분리하고(닫지는 않음), 컴퓨터를 종료하지 마십시오. 그게 전부입니다.

답변2

Screen은 터미널 멀티플렉서이며 서버/클라이언트 모델을 갖습니다. 화면을 시작하면 서버를 시작하기 위해 백그라운드에서 자체적으로 포크된 다음 포그라운드 클라이언트가 서버와 통신을 시작합니다. 이것의 목적은 클라이언트에 무슨 일이 일어나더라도 백그라운드에서 계속 실행되도록 하는 것입니다(클라이언트가 종료되더라도 ssh 등을 통해 실행 중이면 연결이 끊어집니다).

서버에서 스크린 클라이언트를 분리하려면 crtl+를 누른 a다음 을 누르세요 d. 그런 다음 를 사용하여 screen -ls실행 중인 모든 화면 세션을 나열하고 screen -r마지막 화면 세션에 추가할 수 있습니다 .

그러나 화면 내의 emacs 내에서 R을 실행하는 경우 emacs는 R 프로그램을 닫을 시기를 결정하며 화면은 이에 대해 아무 말도 하지 않습니다.

Screen을 사용하면 창을 분할하고 여러 창을 가질 수도 있습니다. emacs를 사용하는 대신 이를 사용하여 애플리케이션을 시작하면 emacs를 종료해도 계속 실행될 수 있습니다.

답변3

그것이 유일한 창문이라면, 그것을 죽여라저것Windows도 죽일 수 있습니다 screen. 창이 열려 있는 한 screen계속 실행되어야 합니다. 예를 들어, 다음을 실행 중일 수 있습니다.R다른 창에서.

screen그러나 일반적으로 창을 종료하면 신호가 전송되기 때문에 창 안의 내용도 중지됩니다 .

현재 창을 종료합니다. 만약 있다면구현하다명령이 실행된 다음 종료됩니다. 그렇지 않으면 창에서 실행 중인 프로세스(셸)는HANGUP이 경우 창 구조가 제거되고 화면(모니터)이 다른 창으로 전환됩니다. 마지막 창이 파괴되면 화면이 종료됩니다. 화면 종료 후 이전에 표시된 창으로 전환합니다. 참고: Emacs 사용자는 줄을 삭제할 때 이 명령을 기억해야 합니다. 사용하지 않는 것이 좋습니다"C-a"화면 이스케이프 키 또는 킬 리바인드"C-a K".

당신이 달리고 있다면REmacs 버퍼에 넣은 다음 (백그라운드에 넣기 위해 아무 것도 하지 않고 및/또는 사용하지 않고)nohup) Emacs 창을 닫으려면 다음이 필요합니다.R그것으로.

물론 screen 세션에서 분리할 수도 있습니다. (이것은 다음과 같습니다.죽이다창): control+Ad

하지만 읽으면 도움이 된다매뉴얼 페이지

답변4

Emacs에서 쉘을 실행하고 있습니까? 그렇다면 Unix 작업 제어를 사용하여 R스크립트를 백그라운드에 배치할 수 있습니다. R스크립트가 실행된 후 을 입력하여 Ctrl-C Ctrl-Z쉘 프롬프트로 돌아갑니다. 그러면 스크립트가 일시 중지됩니다. 그런 다음 bg백그라운드에서 방금 일시 중지된 작업을 다시 시작하려면 입력하세요. 셸 명령을 사용하여 작업이 백그라운드에서 실행되고 있는지 확인할 수 있습니다 jobs.

원하는 것을 달성하는 또 다른 방법은 R백그라운드에서 스크립트를 처음부터 시작하는 것입니다. 바라보다이 링크이렇게 R하거나이 링크이 작업은 명령줄에서 직접 수행하세요.

관련 정보