GNU 화면에서 시작된 프로그램을 다른 터미널로 이동


21

screen내부에서 실행중인 프로세스를 유지하면서 GNU 인스턴스를 종료하고 싶습니다 .

그래서 일반 터미널 에뮬레이터 프로그램을 열고 화면을 실행했습니다. 그런 다음 해당 인스턴스를 사용 screen하여 실행했습니다 ./script_x.sh. 자, 어떤 이유로, 내가 사용 종료하고자 screen하지만 script_x.sh아직 완료되지 않은 그 작업을하고 나는 나의 진행 상황을 상실 기꺼이 아니에요.

일반 터미널 에뮬레이터에서 계속 작업 할 수 있도록 활성 프로세스를 활성 상태로 유지할 수 있습니까?


14
정말로 화면을 죽이고 싶습니까? 아니면 화면에서 분리하고 싶습니까? Screen은 백그라운드에서 프로세스를 실행하는 데 사용되므로 일반 세션을 계속할 수 있으며 로그 아웃 후에도 앱이 계속 실행되도록 할 수 있습니다 (예 : SSH 세션 연결 끊기). 언제든지 화면에서 분리하고 일반 세션을 계속하고 화면 세션에서 남은 곳에서 픽업 할 수 있습니다. 터미널 에뮬레이터는 이와 관련이 없습니다.
BlueCacti

또는 screen세션 내에 다른 화면을 만드십시오 .
chrylis

11
이 질문은 XY 문제 와 같은 냄새가납니다 .
Digital Chris

7
@ tjt263-화면을 처음 사용하는 것을 후회한다고 말하면 화면을 사용하지 않았다면 프로세스를 계속 실행하려면 어떻게해야합니까? 화면의 프로세스에서 여전히 동일한 작업을 수행 할 수 있지만 화면에서 추가 된 이점은 분리하여 프로세스를 방해받지 않게 할 수 있다는 것입니다.
Johnny

@DigitalChris 지금 할 수 있습니다. 원래 제목이 더 관련성이 있다고 생각합니다. 세 가지 뚜렷한 점이 있습니다 screen. 내부에서 프로그램을 실행하고있었습니다 . 사용을 중지하고 싶었습니다 screen. 내부에서 실행중인 프로그램을 중지하고 싶지 않았습니다 screen. 그게 다야. 상황을 명확히하거나 이것보다 간단한 것을 표현하는 방법을 모르겠습니다.
목소리

답변:


31

TLDR : 실용 답변 : 아니요.

더 긴 답변 :

이론적으로는 가능합니다. 경우 당신이 뭔가를 시작 nohup myprog &화면 내부에서 그것은 계속 실행됩니다. 행업 신호를 무시하고 입력이 없지만 이론적으로는 계속 작업 할 수 있습니다.

실제로는 그렇지 않습니다. 따라서 실행중인 프로세스에 디버거를 연결하고 파일 핸들을 다시 쓰고 화면을 닫을 때 프로세스가 -1 신호를 처리하는지 확인하지 않으면 대답은 아니오입니다.

이 작업을 수행 할 준비가되면 누군가 집에서 [SU]를 가리키는 책갈피가 집 있습니다. 쉬운 일이 아니기 때문에 놀랍도록 절약되었습니다.


답변 이후 질문이 크게 편집되었습니다.
chrylis

프로세스 연결을 해제하는 것은 매우 간단합니다. 프로세스 그룹을 설정 disown하거나 ( 낮은 수준으로) SIGHUP부모 프로세스가 종료 될 때 전송 되지 않도록하는 문제 입니다. i / o를 다시 연결하는 것은 디버거가 들어오는 곳
이기도합니다

당신은 필요하지 않습니다 nohup당신이 작업 제어 쉘 (같은에있는 경우 bash, ksh, csh, zsh, ash, 등). Bourne과 같은 비 작업 제어 셸을 계속 사용하고 있다면 sh업그레이드해야 할 때입니다.
병아리

23

reptyr이미 실행중인 응용 프로그램을 다른 터미널에 다시 연결 하는 데 사용할 수 있습니다 . 그러나 백그라운드로 프로세스를 보내는 데 약간의 문제가 있습니다.

방금 테스트 ( htop내부 screen에서 시작 reptyr하여 다른 터미널에서 kill screen)하고 정상적으로 작동하는 것 같습니다. 여전히 정말 해키 솔루션이므로 보장 할 수 없습니다.


1
gdb를 사용하는 것보다 덜 해킹 :)
Hennes

14

예 ( "killing"이 실제로 kill되지 않는 경우), 실제로는 정확히 화면의 용도입니다. 설명서를 확인하고 다음 중 어느 것이 귀하의 요구에 맞는지 시험해보십시오.

C-a d
C-a C-d     (detach)      Detach screen from this terminal.

C-a D D     (pow_detach)  Detach and logout.

그런 다음 선택에 따라 화면의 -D / -d -R / -r 명령 줄 옵션이 필요합니다.


1
이것은 질문에 대답하지 않습니다. OP는 화면에서 분리하지 않고 화면 처리를 종료하려고합니다.
Guntram Blohm은 Monica

6
네, 그는 썼지 만 그가 무엇을 원하는지 확신하지 못했습니다.
Gombai Sándor

11
@GuntramBlohm OP가 화면의 작동 방식을 이해한다는 것은 확실하지 않으며, 이것이 가장 바람직한 효과입니다.
chrylis

2
화면이 xterm과 다른 터미널이 아니라 다른 터미널에서 분리 한 후 실제 터미널 (vterm, xterm, terminator, (m) rxvt, any)에 연결할 수있는 레이어 (의사 터미널)라는 것을 알고 있습니까? 그리고 화면은 프로세스를 화면 내부에서 시작한 프로세스로 유지하는 것입니다 (그리고 잘 수행합니다). 화면을 죽이면 (실제로 죽이면) 프로세스에서 깔개를 꺼낼 수 있습니다.
곰 바이 산도르

1
@ GombaiSándor : 그렇게 하고 싶은 한 가지 이유 는 프로세스 가 터미널 과 직접 대화 하여 화면에 알려지지 않은 기능을 전달하는 것입니다. 예를 들어, 키보드의 모든 이상한 기능 키가 VT102 인 척하는 대신 X11 키심과 전체 수정 자 상태가 포함 된 이스케이프 시퀀스를 보내도록 내 xterm 버전을 해킹 한 다음 설치를 시작했습니다. 이맥스에서 키 바인딩. 이러한 시퀀스는 무해한 화면을 통과하지 않습니다.
Henning Makholm 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.