분리 가능한 세션 (tmux / screen)으로 현재 명령 전송


41

현재 백업을 실행 중이며 on tmux또는 과 같이 분리 가능한 백업으로 전송해야합니다 screen. 명령이 현재 실행 중일 때이를 수행 할 수있는 방법이 있습니까?

Ctrl+ 를 눌러 명령을 백그라운드로 보내고 명령 Z을 실행하여 다시 넣을 수 fg있습니다. 그러나 터미널을 종료 할 때 해당 세션이 돌아갈 수 있는지 여부는 알 수 없습니다.


1
그렇게 할 방법이 없습니다. 화면 (또는 다른) 세션 내에서 명령을 시작해야 분리 할 수 ​​있습니다.
Dan D.

답변:


45

대부분의 경우 다음과 같이 작동합니다.

전제 조건 :가 reptyrtmux/ screen설치; 당신은 그들을 찾을 수 있습니다 apt-get또는 yum플랫폼에 따라.

  1. Ctrl+ Z를 사용 하여 프로세스를 일시 중단하십시오.

  2. 백그라운드에서 프로세스를 다시 시작하십시오. bg

  3. 다음을 사용하여 백그라운드 프로세스의 프로세스 ID를 찾으십시오. jobs -l

    이와 비슷한 것을 볼 수 있습니다 :

    [1]+ 11475 Stopped (signal) yourprocessname
    
  4. 다음을 사용하여 현재 상위 (쉘)에서 작업을 제거하십시오. disown yourprocessname

  5. 시작 tmux(선호), 또는 screen.

  6. reptyr 을 사용하여 프로세스를 tmux/ screen세션에 다시 첨부하십시오.

    reptyr 11475
    
  7. 이제 멀티플렉서 (기본값 Ctrl+ B, Dfor tmux또는 Ctrl+ A, Dfor screen)를 분리하고 프로세스가 tmux/ 에서 계속되는 동안 SSH 연결을 끊을 수 있습니다 screen.

  8. 나중에 SSH로 다시 연결하면 멀티플렉서 (예 :)에 연결할 수 있습니다 tmux attach.


2
불행하게도 실행 한 후 sudo reptyr 1430나는 아직도 있어요 ". ... [-] 아이의 청각을 열 수 없습니다 수 없습니다 1430 PID에 첨부 : 사용 권한이 거부되었습니다"
대릴 스피처

3
경우에 따라 -L 옵션 (예 : reptyr -L 1430)으로 성공할 수 있습니다.
cgseller

1
필요할 때 이것을 실행하십시오 :echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Yanhao

이 요를 통해 아치에 있습니다 : archlinux.org/packages/community/i686/reptyr (하지의 apt-get 냠)
토미

1
이후 bg에는 프로세스가 백그라운드에서 실행 중이므로 대신 jobs말해야 합니다. RunningStopped
G-Man, 'Reinstate

2

reptyr 좋지만 권한 오류가 발생했습니다

$ reptyr 30622

[-] Unable to open the tty in the child.
Unable to attach to pid 30622: Permission denied

그런 다음 발견
-L Like '-l', but also redirect the child's stdio to the slave.

그것은 매력처럼 작동했습니다

$ reptyr -L 30622
Opened a new pty: /dev/pts/4

2
내가 추가했을 때 나는 -L당신과 같은 메시지를 Opened a new pty: /dev/pts/6받았지만 일시 중단 top이 tmux에 나타나지 않았습니다. 내가 여기서 무엇을 놓치고 있습니까?
Mehrad Mahmoudian

-1

해당 명령을 사용할 수있는 경우 disown을 사용하여 터미널에서 작업을 분리 할 수 ​​있습니다.

nohup으로 시작하는 것이 안전합니다.


이것을 확장 할 수 있습니까? 그것으로 시작한다는 것은 무엇을 의미 nohup합니까? disowning프로세스 는 어떻게 작동합니까?
다스 안드로이드

disown은 백그라운드 프로세스 (control-z를 사용하여 백그라운드에 넣음)를 터미널에서 분리하므로 터미널이 없어진 후에도 프로세스가 계속됩니다. 명령이 발견되면 control-z 뒤에 disown을 입력하면됩니다. 그러나 이것은 이론상이며 안정적으로 작동하지 않을 수 있습니다. 다음 번에 프로그램 앞에 nohup을 추가하면 터미널을 안전하게 종료 할 수 있습니다.
johnshen64

언급 한 바와 같이 'disown'은 신뢰할 수없는 것으로 나타났습니다. nohup은 정말 대단하지 않습니다. 그러나 reptyr는 해결책이 될 수 있습니다. github.com/nelhage/reptyr
anastrophe

이것은 질문에 대답하지 않습니다. 문제는 "백업을 종료하지 않고 터미널을 닫는 방법"뿐만 아니라 "나중에 다시 시작하는 방법"입니다. 정답은 "당신은 할 수 없습니다"입니다.
Gabe

여기서 의미 론적 의견 차이가있을 수 있으며 이는 'relocatable', 'position-independent', 'detach tmux'등과 같은 키워드에 대한 매우 인기있는 검색 결과입니다. 프로그램 중지와 재개 사이의 다른 메모리 매핑으로 인해 "할 수 없음"을 의미 했습니까? 백업 프로그램은 제공된 파일 구조로 백업 할 파일 만 알 수 있으며 파일 구조는 나중에 실제 메모리를 맵핑 할 수 있도록하기 위해 존재합니다. (우리는 그렇지 않은 경우를 위해 백업합니다!)
John P
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.