Linux 서버에 원격으로 로그인하기 위해 SSH나 Telent가 자주 필요합니까? 시스템 백업, FTP 전송 등 장시간 실행되는 작업으로 인해 골치 아픈 경우가 자주 있습니까? 일반적으로 이러한 작업은 실행하는 데 시간이 너무 오래 걸리기 때문에 각 작업에 대해 원격 터미널 창을 엽니다. 실행이 완료될 때까지 기다려야 합니다. 이 기간 동안 창을 닫거나 연결을 끊을 수 없습니다. 그렇지 않으면 작업이 종료되고 모든 것이 중간에 취소됩니다.
범인: SIGHUP 신호
창을 닫거나 연결을 끊으면 실행 중인 프로그램이 죽는 이유를 살펴보겠습니다.
Linux/Unix에는 여러 개념이 있습니다.
프로세스 그룹(프로세스 그룹): 하나 이상의 프로세스 모음 각 프로세스 그룹에는 고유한 프로세스 그룹 ID, 즉 프로세스 그룹 리더 프로세스 ID가 있습니다. .
세션: 고유한 세션 리더가 있는 하나 이상의 프로세스 그룹 모음입니다. 세션 ID는 첫 번째 프로세스의 ID입니다.
세션은 별도의 제어 터미널을 가질 수 있습니다. 제어 단말에 연결된 세션의 첫 번째 프로세스를 제어 프로세스라고 합니다. 현재 터미널과 상호 작용하는 프로세스를 포그라운드 프로세스 그룹이라고 합니다. 나머지 프로세스 그룹을 백그라운드 프로세스 그룹이라고 합니다.
POSIX.1 정의에 따르면:
중단 신호(SIGHUP)의 기본 동작은 프로그램을 종료하는 것입니다.
터미널 인터페이스가 네트워크 연결이 끊어진 것을 감지하면 제어 프로세스(세션의 첫 번째 프로세스)에 끊김 신호를 보냅니다.
세션 헤드 프로세스가 종료되면 이 신호는 세션 포그라운드 프로세스 그룹으로 전송됩니다.
프로세스가 종료되고 고아 프로세스 그룹이 생성될 때 고아 프로세스 그룹 프로세스가 STOP 상태에 있으면 SIGHUP 및 SIGCONT 신호가 프로세스 그룹의 모든 프로세스에 전송됩니다.
그래서 네트워크 연결이 끊기거나 터미널 창이 닫히면 제어 프로세스가 SIGHUP 신호를 받고 종료되며, 이로 인해 세션의 다른 프로세스가 종료됩니다.
예를 살펴보겠습니다. 두 개의 SSH 터미널 창을 열고 그 중 하나에서 top 명령을 실행합니다.
[root@tivf09 root]# top
다른 터미널 창에서 top의 프로세스 ID는 5180이고 상위 프로세스 ID는 로그인 셸인 5128입니다.
[root@tivf09 root]# ps -ef|grep top root 5180 5128 0 01:03 pts/0 00:00:02 top root 5857 3672 0 01:12 pts/2 00:00:00 grep top
이 관계를 더 명확하게 보려면 pstree 명령을 사용하십시오.
[root@tivf09 root]# pstree -H 5180|grep top |-sshd-+-sshd---bash---top
ps-xj 명령을 사용하여 로그인 셸(PID 5128)과 top이 동일한 세션에 있고 셸이 로그인 셸의 첫 번째 프로세스인지 확인하세요. 세션이며 프로세스 그룹에 속해 있습니다. PGID는 5128이고, top이 위치한 프로세스 그룹의 PGID는 5180으로 포그라운드 프로세스 그룹입니다.
[root@tivf09 root]# ps -xj|grep 5128 5126 5128 5128 5128 pts/0 5180 S 0 0:00 -bash 5128 5180 5180 5128 pts/0 5180 S 0 0:50 top 3672 18095 18094 3672 pts/2 18094 S 0 0:00 grep 5128
첫 번째 SSH 창을 닫으면 다른 창에서 top도 종료된 것을 볼 수 있습니다.
[root@tivf09 root]# ps -ef|grep 5128 root 18699 3672 0 04:35 pts/2 00:00:00 grep 5128
SIGHUP 신호를 무시할 수 있다면 창을 닫아도 프로그램 실행에 영향을 미치지 않습니다. nohup 명령을 사용하면 프로그램의 표준 출력/표준 오류가 터미널인 경우 기본적으로 nohup.out 파일로 리디렉션됩니다. nohup 명령은 프로그램이 SIGHUP 신호를 무시하게만 한다는 점은 주목할 가치가 있습니다. 또한 백그라운드에서 실행하려면 & 표시를 사용해야 합니다.
nohup <command> [argument…] &</command>
nohup은 사용하기 쉽지만 여전히 비교적 "초보적"입니다. 간단한 명령을 처리할 수 있지만 인간과 컴퓨터의 상호 작용이 필요한 복잡한 작업에는 문제가 있습니다.
실제로는 더 강력한 유틸리티 화면을 사용할 수 있습니다. 인기 있는 Linux 배포판(예: Red Hat Enterprise Linux 4)에는 일반적으로 screen 유틸리티가 함께 제공됩니다. 그렇지 않은 경우 공식 GNU screen 웹사이트에서 다운로드할 수 있습니다.
[root@tivf06 ~]# rpm -qa|grep screen xscreensaver-4.18-5.rhel4.11 screen-4.0.2-5
Screen 사용 시작
간단히 말해서 Screen은 여러 프로세스 간에 물리적 터미널을 다중화할 수 있는 창 관리자입니다. Screen은 세션이라는 개념을 가지고 있으며, 사용자는 하나의 Screen 세션에서 여러 개의 스크린 창을 생성할 수 있으며, 각 스크린 창은 실제 Telnet/SSH 연결 창을 운영하는 것과 같습니다. 화면에 새 창을 만드는 방법에는 여러 가지가 있습니다:
1.
[root@tivf06 ~]# screen
Screen 명령줄에 직접 screen 명령을 입력하면 셸 실행을 위한 전체 화면 창이 생성됩니다. SSH 창에서와 마찬가지로 임의의 쉘 프로그램을 실행할 수 있습니다. 창을 종료하려면 창에 exit를 입력하세요. 이 창이 screen 세션의 유일한 창인 경우 screen 세션이 종료되고, 그렇지 않으면 screen이 자동으로 이전 창으로 전환됩니다.
2. Screen 명령 다음에는 실행하려는 프로그램이 옵니다.
[root@tivf06 ~]# screen vi test.c
Screen은 vi test.c를 실행하는 단일 창 세션을 생성합니다. vi를 종료하면 창/세션이 종료됩니다.
3. 위의 두 가지 방법 모두 새로운 화면 세션을 생성합니다. 기존 스크린 세션 내에서 새 창을 만들 수도 있습니다. 현재 화면 창에서 C-a c, 즉 Ctrl 키 + a 키를 입력한 후 c 키를 누르면 화면이 나타납니다. 세션 내에 새 창을 만들고 그 창으로 전환합니다.
화면에는 더욱 고급 기능도 있습니다. 스크린 창에서 프로그램 실행을 중단하지 않고 스크린 세션을 일시적으로 연결 해제(분리)하고 나중에 세션을 다시 연결(연결)하여 각 창에서 실행 중인 프로그램에 대한 제어권을 다시 얻을 수 있습니다. 예를 들어, /tmp/abc 파일을 편집하기 위해 스크린 창을 엽니다:
[root@tivf06 ~]# screen vi /tmp/abc
그런 다음 일시적으로 종료하고 산책과 같은 다른 작업을 수행하고 스크린 창에 C-a d를 입력하면 Screen이 분리된 프롬프트 제공:
暂时中断会话
半个小时之后回来了,找到该screen会话:
[root@tivf06 ~]# screen -ls There is a screen on: 16582.pts-1.tivf06 (Detached) 1 Socket in /tmp/screens/S-root.
重新连接会话:
[root@tivf06 ~]# screen -r 16582
看看出现什么了,太棒了,一切都在。继续干吧。
你可能注意到给screen发送命令使用了特殊的键组合C-a。这是因为我们在键盘上键入的信息是直接发送给当前screen窗口,必须用其他方式向screen窗口管理器发出命令,默认情况下,screen接收以C-a开始的命令。这种命令形式在screen中叫做键绑定(key binding),C-a叫做命令字符(command character)。
可以通过C-a ?来查看所有的键绑定,常用的键绑定有:
C-a ? | 显示所有键绑定信息 |
---|---|
C-a w | 显示所有窗口列表 |
C-a C-a | 切换到之前显示的窗口 |
C-a c | 创建一个新的运行shell的窗口并切换到该窗口 |
C-a n | 切换到下一个窗口 |
C-a p | 切换到前一个窗口(与C-a n相对) |
C-a 0..9 | 切换到窗口0..9 |
C-a a | 发送 C-a到当前窗口 |
C-a d | 暂时断开screen会话 |
C-a k | 杀掉当前窗口 |
C-a [ | 进入拷贝/回滚模式 |
Screen常用选项
使用键绑定C-a ?命令可以看到, 默认的命令字符(Command key)为C-a,转义C-a(literal ^a)的字符为a:
Screen 常用选项
因为screen把C-a看作是screen命令的开始,所以如果你想要screen窗口接收到C-a字符,就要输入C-a a。Screen也允许你使用-e选项设置自己的命令字符和转义字符,其格式为:
-exy x为命令字符,y为转义命令字符的字符
下面命令启动的screen会话指定了命令字符为C-t,转义C-t的字符为t,通过C-t ?命令可以看到该变化。
[root@tivf18 root]# screen -e^tt
自定义命令字符和转义字符
其他常用的命令选项有:
-c file | 使用配置文件file,而不使用默认的$HOME/.screenrc |
---|---|
-d|-D [pid.tty.host] | 不开启新的screen会话,而是断开其他正在运行的screen会话 |
-h num | 指定历史回滚缓冲区大小为num行 |
-list|-ls | 列出现有screen会话,格式为pid.tty.host |
-d -m | 启动一个开始就处于断开模式的会话 |
-r sessionowner/ [pid.tty.host] | 重新连接一个断开的会话。多用户模式下连接到其他用户screen会话需要指定sessionowner,需要setuid-root权限 |
-S sessionname | 创建screen会话时为会话指定一个名字 |
-v | 显示screen版本信息 |
-wipe [match] | 同-list,但删掉那些无法连接的会话 |
下例显示当前有两个处于detached状态的screen会话,你可以使用screen -r
[root@tivf18 root]# screen –ls There are screens on: 8736.pts-1.tivf18 (Detached) 8462.pts-0.tivf18 (Detached) 2 Sockets in /root/.screen. [root@tivf18 root]# screen –r 8736
如果由于某种原因其中一个会话死掉了(例如人为杀掉该会话),这时screen -list会显示该会话为dead状态。使用screen -wipe命令清除该会话:
[root@tivf18 root]# kill -9 8462 [root@tivf18 root]# screen -ls There are screens on: 8736.pts-1.tivf18 (Detached) 8462.pts-0.tivf18 (Dead ???) Remove dead screens with 'screen -wipe'. 2 Sockets in /root/.screen. [root@tivf18 root]# screen -wipe There are screens on: 8736.pts-1.tivf18 (Detached) 8462.pts-0.tivf18 (Removed) 1 socket wiped out. 1 Socket in /root/.screen. [root@tivf18 root]# screen -ls There is a screen on: 8736.pts-1.tivf18 (Detached) 1 Socket in /root/.screen. [root@tivf18 root]#
-d –m 选项是一对很有意思的搭档。他们启动一个开始就处于断开模式的会话。你可以在随后需要的时候连接上该会话。有时候这是一个很有用的功能,比如我们可以使用它调试后台程序。该选项一个更常用的搭配是:-dmS sessionname
启动一个初始状态断开的screen会话:
[root@tivf06 tianq]# screen -dmS mygdb gdb execlp_test
连接该会话:
[root@tivf06 tianq]# screen -r mygdb
管理你的远程会话
先来看看如何使用screen解决SIGHUP问题,比如现在我们要ftp传输一个大文件。如果按老的办法,SSH登录到系统,直接ftp命令开始传输,之后。。如果网络速度还可以,恭喜你,不用等太长时间了;如果网络不好,老老实实等着吧,只能传输完毕再断开SSH连接了。让我们使用screen来试试。
SSH登录到系统,在命令行键入screen。
[root@tivf18 root]# screen
在screen shell窗口中输入ftp命令,登录,开始传输。不愿意等了?OK,在窗口中键入C-a d:
管理你的远程会话
然后。。退出SSH登录?随你怎样,只要别杀掉screen会话。
是不是很方便?更进一步,其实我们可以利用screen这种功能来管理你的远程会话,保存你所有的工作内容。你是不是每次登录到系统都要开很多窗口,然后每天都要重复打开关闭这些窗口?让screen来帮你“保存”吧,你只需要打开一个ssh窗口,创建需要的screen窗口,退出的时候C-a d“保存”你的工作,下次登录后直接screen -r
最好能给每个窗口起一个名字,这样好记些。使用C-a A给窗口起名字。使用C-a w可以看到这些窗口名字,可能名字出现的位置不同。使用putty:
putty
使用telnet:
telnet
更多Screen功能
Screen提供了丰富强大的定制功能。你可以在Screen的默认两级配置文件/etc/screenrc和$HOME/.screenrc中指定更多,例如设定screen选项,定制绑定键,设定screen会话自启动窗口,启用多用户模式,定制用户访问权限控制等等。如果你愿意的话,也可以自己指定screen配置文件。
以多用户功能为例,screen默认是以单用户模式运行的,你需要在配置文件中指定multiuser on 来打开多用户模式,通过acl*(acladd,acldel,aclchg...)命令,你可以灵活配置其他用户访问你的screen会话。更多配置文件内容请参考screen的man页。
위 내용은 Linux는 화면을 사용하여 원격 세션 인스턴스 방법을 관리합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

JavaScript 코어 데이터 유형은 브라우저 및 Node.js에서 일관되지만 추가 유형과 다르게 처리됩니다. 1) 글로벌 객체는 브라우저의 창이고 node.js의 글로벌입니다. 2) 이진 데이터를 처리하는 데 사용되는 Node.js의 고유 버퍼 객체. 3) 성능 및 시간 처리에는 차이가 있으며 환경에 따라 코드를 조정해야합니다.

javaScriptUSTWOTYPESOFSOFCOMMENTS : 단일 라인 (//) 및 multi-line (//)

Python과 JavaScript의 주요 차이점은 유형 시스템 및 응용 프로그램 시나리오입니다. 1. Python은 과학 컴퓨팅 및 데이터 분석에 적합한 동적 유형을 사용합니다. 2. JavaScript는 약한 유형을 채택하며 프론트 엔드 및 풀 스택 개발에 널리 사용됩니다. 두 사람은 비동기 프로그래밍 및 성능 최적화에서 고유 한 장점을 가지고 있으며 선택할 때 프로젝트 요구 사항에 따라 결정해야합니다.

Python 또는 JavaScript를 선택할지 여부는 프로젝트 유형에 따라 다릅니다. 1) 데이터 과학 및 자동화 작업을 위해 Python을 선택하십시오. 2) 프론트 엔드 및 풀 스택 개발을 위해 JavaScript를 선택하십시오. Python은 데이터 처리 및 자동화 분야에서 강력한 라이브러리에 선호되는 반면 JavaScript는 웹 상호 작용 및 전체 스택 개발의 장점에 없어서는 안될 필수입니다.

파이썬과 자바 스크립트는 각각 고유 한 장점이 있으며 선택은 프로젝트 요구와 개인 선호도에 따라 다릅니다. 1. Python은 간결한 구문으로 데이터 과학 및 백엔드 개발에 적합하지만 실행 속도가 느립니다. 2. JavaScript는 프론트 엔드 개발의 모든 곳에 있으며 강력한 비동기 프로그래밍 기능을 가지고 있습니다. node.js는 풀 스택 개발에 적합하지만 구문은 복잡하고 오류가 발생할 수 있습니다.

javaScriptisNotBuiltoncorc; it'SangretedLanguageThatrunsonOngineStenWrittenInc .1) javaScriptWasDesignEdasAlightweight, 해석 hanguageforwebbrowsers.2) Endinesevolvedfromsimpleplemporectreterstoccilpilers, 전기적으로 개선된다.

JavaScript는 프론트 엔드 및 백엔드 개발에 사용할 수 있습니다. 프론트 엔드는 DOM 작업을 통해 사용자 경험을 향상시키고 백엔드는 Node.js를 통해 서버 작업을 처리합니다. 1. 프론트 엔드 예 : 웹 페이지 텍스트의 내용을 변경하십시오. 2. 백엔드 예제 : node.js 서버를 만듭니다.

Python 또는 JavaScript는 경력 개발, 학습 곡선 및 생태계를 기반으로해야합니다. 1) 경력 개발 : Python은 데이터 과학 및 백엔드 개발에 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 적합합니다. 2) 학습 곡선 : Python 구문은 간결하며 초보자에게 적합합니다. JavaScript Syntax는 유연합니다. 3) 생태계 : Python에는 풍부한 과학 컴퓨팅 라이브러리가 있으며 JavaScript는 강력한 프론트 엔드 프레임 워크를 가지고 있습니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!