SSH 쉘에서 실행되는 프로그램이 있습니다. 일시 중지하고 다시 돌아올 때 실행 일시 중지를 해제할 수 있기를 원합니다.
내가 생각한 한 가지 방법은 소유권을 스크린 셸로 이전하여 그곳에서 계속 실행하는 것입니다.
계속할 다른 방법이 있나요?
답변1
다음을 사용하여 셸에서 프로그램의 "소유권"을 취소할 수 있습니다.disown
내장:
# press Ctrl+Z to suspend the program
bg
disown
SIGHUP
그러나 이는 단지 쉘이 종료될 때 프로그램에 신호를 보내지 않도록 쉘에 지시하는 것입니다 . 프로그램은 일반적으로 표준 입력, 출력 및 오류 스트림으로 터미널에 대한 모든 연결을 유지합니다. 다른 터미널에 다시 연결할 수 없습니다. (화면각 창의 터미널을 시뮬레이션하여 작동하므로 프로그램이 화면 창에 연결됩니다. )
프로그램을 디버거에 연결하여(예: 다음을 사용하여) 파일 설명자를 다른 파일에 다시 연결할 수 있습니다.ptrace
) 그리고 이를 호출하도록 open
하면 이를 수행하는 도구가 있으며 이는 까다로운 프로세스이며 때로는 프로세스가 중단됩니다. 가능성은 다음과 같습니다(답변에서 수집된 링크dup
close
실행 중인 프로세스를 거부하고 이를 새 화면 셸에 연결하는 방법은 무엇입니까?그리고이미 시작된 프로세스를 nohup/screen할 수 있나요?):
답변2
GNU를 사용하는 것이 screen
최선의 선택입니다.
첫 번째 로그인 시 화면 실행 시작 - 실행하고 screen -D -R
명령을 실행한 다음 연결을 끊거나 일시 중지 CTRL-Z
한 다음 그런 다음 키를 눌러 CTRL-A
화면 연결을 끊습니다 D
.
컴퓨터에 다시 로그인하면 를 실행하여 다시 연결하세요 screen -D -R
. 이전과 동일한 쉘에 있게 됩니다. 이렇게 하면 jobs
중단된 프로세스 보기를 실행한 다음 실행 %1
(또는 해당 작업#)을 실행하여 다시 포그라운드로 가져올 수 있습니다.
답변3
터미널 간에 프로세스를 이동하거나 거부된 프로세스를 다시 연결하려면 다음을 사용할 수 있습니다.렙텔.
답변4
다음과 같은 작은 유틸리티도 있습니다.레티실행 중인 프로그램을 다른 터미널에 다시 연결할 수 있습니다.