>  기사  >  운영 및 유지보수  >  Screen을 사용하여 원격 세션을 관리하는 방법은 무엇입니까?

Screen을 사용하여 원격 세션을 관리하는 방법은 무엇입니까?

青灯夜游
青灯夜游앞으로
2019-03-28 14:20:082293검색

이 글의 내용은 Screen을 사용하여 원격 세션을 관리하는 방법을 소개하는 것입니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

로컬에서 개발하다 보면 리눅스 서버에 원격 연결을 해야 하는 경우가 많습니다. 처음에는 여러 개의 리모컨이 있을 때 여러 개의 SSH 창을 열었습니다. 이 방법은 매우 독창적이고 직접적이지만 매번 그렇습니다. 비밀번호 없이 SSH를 사용해 로그인하더라도 매번 SSH 명령을 입력하는 것이 전혀 빠르지 않다는 느낌을 받게 될 것입니다. Linux 도구도 많이 있습니다. 오늘은 screen 도구에 대해 알아 보겠습니다. screen工具。

在介绍screen工具时,先讨论一下,为什么连接服务器后,当执行长时间的任务时,我们关闭远程连接窗口,这个任务就被杀掉了呢?

元凶:SIGUP信号

在Linux/Unix中,有以下几个概念:

  • 进程组(process group):一个或多个进程的集合,每个进程组都有一个唯一的进程组ID;

  • 会话期(session):一个或多个进程组的集合,有唯一一个会话首进程(session leader),会话期ID为首进程ID;

  • 会话期可以有一个单独的会话终端,与控制终端连接的会话期首进程叫控制进程(controlling process),当前与终端交互的进程称为前台进程组,其余进程组称为后台进程组。

工具POSIX.1定义:

  • 挂断信号(SIGHUP)默认的动作是终止程序;

  • 当终端接口检测到网络连接断开,将发送SIGHUP信号给控制进程(会话期首进程);

  • 如果会话期首进程终止,则该信号发送到该会话期前台进程组;

  • 一个进程退出导致一个孤儿进程组产生时,如果人一个孤儿进程组进程处于STOP状态,则发送SIGHUP和SIGCONT信号到该进程组中所有进程。

因此当网络断开或窗口关闭时,控制进程收到SIGHUP信号退出,会导致该会话期内其他进程退出。

一个简单例子

打开两个SSH终端窗口,在第一个中执行ping命令:

Screen을 사용하여 원격 세션을 관리하는 방법은 무엇입니까?

再另一个终端窗口中,找到ping的进程ID为22132,其父进程ID为21803,即登录zsh:

Screen을 사용하여 원격 세션을 관리하는 방법은 무엇입니까?

使用ps -xj可以看到,登录zsh(PID 21803)和ping在同一会话期,zsh为会话期首进程,所以进程组PGID为21803,ping所在的进程组PGID为22132,为前台进程组。

Screen을 사용하여 원격 세션을 관리하는 방법은 무엇입니까?

这时,我们关闭第一个SSH远程窗口,在另一个窗口中看到ping进程被杀掉了:

Screen을 사용하여 원격 세션을 관리하는 방법은 무엇입니까?

这就发现,当我们执行一个耗时的任务时,如果关闭了这个窗口,这个任务进程也就被杀掉了,并不是我们所期望的那样在后台继续执行。

使用screen

现在,也不需要多说screen到底是干什么的了,直接说怎么使用吧。

1、直接执行screen命令

Screen을 사용하여 원격 세션을 관리하는 방법은 무엇입니까?

screen将创建一个执行shell的全屏窗口,可以看到窗口的title已经提示处于screen程序中,在这个窗口中你可以随便执行命令,如果要退出输入exit命令。

2、如果你想新开一个窗口执行另一个任务,可以执行:

// 方法1
按键盘Ctrl+a +c, 会心打开一个screen窗口

// 方法2
screen 需要执行的任务的命令,比如:
screen ping www.baidu.com

3、多个screen

screen 도구를 소개할 때 서버에 연결한 후 장기 작업을 실행할 때 원격 연결 창을 닫고 작업이 종료되는 이유를 먼저 논의해 보겠습니다. . 무슨 일이야?

범인: SIGUP 신호

Linux/Unix에는 다음과 같은 개념이 있습니다.

  • Screen을 사용하여 원격 세션을 관리하는 방법은 무엇입니까?프로세스 그룹(프로세스 그룹): 하나 이상의 프로세스 모음, 각 프로세스 그룹에는 고유한 프로세스 그룹 ID가 있습니다.
  • 세션: 고유한 세션 리더가 있는 하나 이상의 프로세스 그룹 모음이며 세션 ID는 리더 프로세스 ID입니다. Screen을 사용하여 원격 세션을 관리하는 방법은 무엇입니까?

  • 세션은 별도의 세션 터미널을 가질 수 있습니다. 제어 터미널에 연결된 세션의 첫 번째 프로세스를 제어 프로세스(controlling process)라고 합니다. 현재 터미널과 상호 작용하는 프로세스를 포그라운드라고 합니다. 프로세스 그룹, 기타 프로세스 그룹을 백그라운드 프로세스 그룹이라고 합니다. #🎜🎜#
#🎜🎜#Tool POSIX.1 정의: #🎜🎜#
  • #🎜🎜#전화 끊기 신호(SIGHUP)의 기본 동작은 program;# 🎜🎜#
  • #🎜🎜#터미널 인터페이스가 네트워크 연결이 끊어진 것을 감지하면 제어 프로세스(세션의 첫 번째 프로세스)에 SIGHUP 신호를 보냅니다. 🎜#
  • #🎜 🎜#세션의 첫 번째 프로세스가 종료되면 해당 세션의 포그라운드 프로세스 그룹으로 신호가 전송됩니다. #🎜🎜#
  • #🎜🎜# 프로세스가 종료되어 고아 프로세스 그룹이 생성된 경우 고아가 있는 경우 프로세스 그룹 프로세스가 STOP 상태인 경우 프로세스 그룹의 모든 프로세스에 SIGHUP 및 SIGCONT 신호가 전송됩니다. #🎜🎜#
#🎜🎜#따라서 네트워크 연결이 끊기거나 창이 닫히면 제어 프로세스가 SIGHUP 신호를 받고 종료되며, 이로 인해 세션의 다른 프로세스가 종료됩니다. #🎜🎜#

간단한 예

#🎜🎜#Open 두 개의 SSH 터미널 창에서 첫 번째 창에서 ping 명령을 실행합니다: #🎜🎜##🎜🎜#Screen을 사용하여 원격 세션을 관리하는 방법은 무엇입니까?#🎜🎜##🎜🎜#다른 터미널 창에서 ping의 프로세스 ID를 22132로 찾고 그 부모는 프로세스 ID는 21803입니다. 즉, zsh에 로그인합니다: #🎜🎜##🎜🎜#Screen을 사용하여 원격 세션을 관리하는 방법은 무엇입니까?#🎜🎜##🎜🎜#ps -xj를 사용하면 zsh(PID 21803)에 로그인하는 것과 ping이 동일한 세션에 있고 zsh에 로그인하는 것을 볼 수 있습니다. 은 세션의 첫 번째 프로세스이므로 프로세스 그룹의 PGID는 21803이고, ping이 위치한 프로세스 그룹의 PGID는 포그라운드 프로세스 그룹인 22132입니다. #🎜🎜##🎜🎜#Screen을 사용하여 원격 세션을 관리하는 방법은 무엇입니까?#🎜🎜# #🎜🎜#이때 첫 번째 SSH 원격 창을 닫았고 다른 창에서 ping 프로세스가 종료된 것을 확인했습니다: #🎜🎜##🎜🎜#Screen을 사용하여 원격 세션을 관리하는 방법은 무엇입니까?#🎜🎜##🎜🎜#이것은 시간이 많이 걸리는 작업을 수행할 때, 닫을 때 이 창을 닫을 때를 보여줍니다. 열리면 작업 프로세스가 종료되고 예상한 대로 백그라운드에서 계속 실행되지 않습니다. #🎜🎜#

화면 사용

#🎜🎜#지금도 마찬가지입니다 screen이 무엇인지에 대해 더 말할 필요는 없습니다. 단지 그것을 사용하는 방법에 대해서만 이야기해 보겠습니다. #🎜🎜##🎜🎜#1. screen 명령을 직접 실행 #🎜🎜##🎜🎜#Screen을 사용하여 원격 세션을 관리하는 방법은 무엇입니까?#🎜🎜##🎜🎜#screen은 셸을 실행하는 전체 화면 창을 생성합니다. 창 제목이 screen 프로그램을 종료하려면 exit 명령을 입력하세요. #🎜🎜##🎜🎜#2. 다른 작업을 수행하기 위해 새 창을 열려면 다음을 실행하면 됩니다. #🎜🎜#
方法1
键盘Ctrl+a +[0..9]

方法2
键盘Ctrl+a +n, 下一个screen窗口
键盘Ctrl+a +p, 上一个screen窗口
#🎜🎜#3. 🎜 🎜#rrreee#🎜🎜#더 많은 명령을 보려면 아래 그림을 참조하세요. #🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#

Screen은 여러 프로세스 간에 물리적 터미널을 다중화할 수 있는 창 관리자입니다. Screen에도 세션 개념이 있습니다. 사용자는 화면 세션에서 여러 화면 창을 만들 수 있으며, 각 화면 세션에서 화면 창을 운영하는 것과 같습니다. 실제 SSH 연결 창.

추천 관련 비디오 튜토리얼: "Linux Tutorial"

위 내용은 이 글의 전체 내용입니다. 모두의 학습에 도움이 됩니다. 더 흥미로운 내용을 보려면 PHP 중국어 웹사이트의 관련 튜토리얼 열을 주의 깊게 살펴보세요! ! !

위 내용은 Screen을 사용하여 원격 세션을 관리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제