it-swarm.dev

실행중인 프로세스를 제거하고 새 화면 셸에 연결하려면 어떻게해야합니까?

SSH Shell에서 실행중인 프로그램이 있습니다. 일시 중지하고 돌아올 때 실행을 일시 중지 할 수 있기를 원합니다.

내가 생각한 한 가지 방법은 소유권을 화면 셸로 이전하여 계속 실행하는 것입니다.

다른 방법으로 진행할 수 있습니까?

164
levesque

GNU screen 사용하는 것이 가장 좋습니다.

처음 로그인 할 때 화면 시작-screen -D -R를 실행하고 명령을 실행 한 다음 CTRL-Z로 연결을 끊거나 일시 중단 한 다음 CTRL-A를 누른 다음 화면에서 연결을 끊습니다. D.

컴퓨터에 다시 로그인하면 screen -D -R를 실행하여 다시 연결하십시오. 당신은 이전과 같은 껍질에있을 것입니다. 일시 중단 된 프로세스를 확인하려면 jobs를 실행하고 %1 (또는 해당 작업 번호)를 실행하여 다시 포 그라운드로 지정할 수 있습니다.

88
Andrew Yochum

disown 내장을 사용하여 쉘에서 프로그램의 "소유권"을 취소 할 수 있습니다.

# press Ctrl+Z to suspend the program
bg
disown

그러나 이것은 쉘이 종료 할 때 프로그램에 SIGHUP 신호를 보내지 말라고 쉘에게 지시합니다. 프로그램은 일반적으로 표준 입력, 출력 및 오류 스트림으로 터미널과의 모든 연결을 유지합니다. 다른 터미널에 다시 연결할 수있는 방법이 없습니다. ( Screen 각 창마다 터미널을 에뮬레이트하여 작동하므로 프로그램이 화면 창에 연결됩니다.)


디버거에 프로그램을 연결 (예 : ptrace 사용)하고 open, dupclose. 이를 수행하는 몇 가지 도구가 있습니다. 이것은 까다로운 프로세스이며 때로는 프로세스를 중단시킬 수 있습니다. 가능성은 다음과 같습니다 (- 실행중인 프로세스를 제거하고 새 화면 셸에 연결하려면 어떻게해야합니까?이미 시작된 프로세스를 Nohup/screen 할 수 있습니까? =) :

터미널간에 프로세스를 이동하거나 사용하지 않는 사람을 다시 연결하려면 예를 들어 reptyr .

67
jofel

내가 가장 좋아하는 솔루션은 tmux를 사용하는 것입니다. 세션을 분리 한 후 다른 터미널에 다시 연결할 수 있습니다.

이전 세션에서 분리하면 터미널을 안전하게 닫을 수 있습니다. 나중에 tmux attach 로그 아웃해도 세션으로 돌아갑니다.

28
daisy

실행중인 프로그램을 다른 터미널에 다시 연결할 수있는 retty 라는 작은 유틸리티도 있습니다.

21
adamg

정기적으로 사용하지는 않지만 neercs 는 이것을 지원한다고 주장합니다. 더 나은 창 관리와 같은 기타 고급 기능을 갖춘 screen와 같은 프로그램이지만, 제공하는 주요 기능은 프로세스를 창으로 가져 오는 기능입니다

19
Michael Mrozek

일시 중지하고 나중에 다시 시작하려면 kill 또는 STOP 신호와 함께 CONT를 사용할 수 있습니다.

처음에는 프로세스 PID를 찾아

$ ps aux

그런 다음 프로세스에 나열된 PID로 신호를 보냅니다.

$ kill -STOP <PID>

$ kill -CONT <PID>
9
yunzen

ThomasHabets의 "injcode"가 정확히 필요한 것 같습니다.

https://github.com/ThomasHabets/injcode

Injcode 프로그램을 사용하면 미리 알고 화면 또는 tmux를 실행했는지 여부에 관계없이 임의의 코드를 실행중인 프로세스에 삽입 할 수 있습니다.

읽어보기에서 :

예 1 : 한 터미널에서 다른 터미널로 irssi 이동

화면으로 옮길 수도 있습니다.

첫 번째 터미널에서 irssi를 시작하십시오.

다른 터미널에서 injcode를 실행하십시오 : $ injcode -m retty

Irssi는 이제 새로운 제어 터미널을 포함하여 두 번째 터미널로 이동해야합니다.

9
user2688272

이것은 나를 위해 일했다 :

  1. bg 프로세스
  2. jobs -l 프로세스 번호 찾기
  3. tmux 쉘 창 관리자 시작
  4. reptyr -L PROCESSNUMBER

reptyr-L이 작업을 수행하는 데 필요했습니다.

-L Like '-l', but also redirect the child's stdio to the slave.

이 오류로 인해 :

$ reptyr 30622

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

그리고 -L과 함께

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