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는 웹 페이지의 상호 작용과 역학을 향상시키기 때문에 현대 웹 사이트의 핵심입니다. 1) 페이지를 새로 고치지 않고 콘텐츠를 변경할 수 있습니다. 2) Domapi를 통해 웹 페이지 조작, 3) 애니메이션 및 드래그 앤 드롭과 같은 복잡한 대화식 효과를 지원합니다. 4) 성능 및 모범 사례를 최적화하여 사용자 경험을 향상시킵니다.

C 및 JavaScript는 WebAssembly를 통한 상호 운용성을 달성합니다. 1) C 코드는 WebAssembly 모듈로 컴파일되어 컴퓨팅 전력을 향상시키기 위해 JavaScript 환경에 도입됩니다. 2) 게임 개발에서 C는 물리 엔진 및 그래픽 렌더링을 처리하며 JavaScript는 게임 로직 및 사용자 인터페이스를 담당합니다.

JavaScript는 웹 사이트, 모바일 응용 프로그램, 데스크탑 응용 프로그램 및 서버 측 프로그래밍에서 널리 사용됩니다. 1) 웹 사이트 개발에서 JavaScript는 HTML 및 CSS와 함께 DOM을 운영하여 동적 효과를 달성하고 jQuery 및 React와 같은 프레임 워크를 지원합니다. 2) 반응 및 이온 성을 통해 JavaScript는 크로스 플랫폼 모바일 애플리케이션을 개발하는 데 사용됩니다. 3) 전자 프레임 워크를 사용하면 JavaScript가 데스크탑 애플리케이션을 구축 할 수 있습니다. 4) node.js는 JavaScript가 서버 측에서 실행되도록하고 동시 요청이 높은 높은 요청을 지원합니다.

Python은 데이터 과학 및 자동화에 더 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 더 적합합니다. 1. Python은 데이터 처리 및 모델링을 위해 Numpy 및 Pandas와 같은 라이브러리를 사용하여 데이터 과학 및 기계 학습에서 잘 수행됩니다. 2. 파이썬은 간결하고 자동화 및 스크립팅이 효율적입니다. 3. JavaScript는 프론트 엔드 개발에 없어서는 안될 것이며 동적 웹 페이지 및 단일 페이지 응용 프로그램을 구축하는 데 사용됩니다. 4. JavaScript는 Node.js를 통해 백엔드 개발에 역할을하며 전체 스택 개발을 지원합니다.

C와 C는 주로 통역사와 JIT 컴파일러를 구현하는 데 사용되는 JavaScript 엔진에서 중요한 역할을합니다. 1) C는 JavaScript 소스 코드를 구문 분석하고 추상 구문 트리를 생성하는 데 사용됩니다. 2) C는 바이트 코드 생성 및 실행을 담당합니다. 3) C는 JIT 컴파일러를 구현하고 런타임에 핫스팟 코드를 최적화하고 컴파일하며 JavaScript의 실행 효율을 크게 향상시킵니다.

실제 세계에서 JavaScript의 응용 프로그램에는 프론트 엔드 및 백엔드 개발이 포함됩니다. 1) DOM 운영 및 이벤트 처리와 관련된 TODO 목록 응용 프로그램을 구축하여 프론트 엔드 애플리케이션을 표시합니다. 2) Node.js를 통해 RESTFULAPI를 구축하고 Express를 통해 백엔드 응용 프로그램을 시연하십시오.

웹 개발에서 JavaScript의 주요 용도에는 클라이언트 상호 작용, 양식 검증 및 비동기 통신이 포함됩니다. 1) DOM 운영을 통한 동적 컨텐츠 업데이트 및 사용자 상호 작용; 2) 사용자가 사용자 경험을 향상시키기 위해 데이터를 제출하기 전에 클라이언트 확인이 수행됩니다. 3) 서버와의 진실한 통신은 Ajax 기술을 통해 달성됩니다.

보다 효율적인 코드를 작성하고 성능 병목 현상 및 최적화 전략을 이해하는 데 도움이되기 때문에 JavaScript 엔진이 내부적으로 작동하는 방식을 이해하는 것은 개발자에게 중요합니다. 1) 엔진의 워크 플로에는 구문 분석, 컴파일 및 실행; 2) 실행 프로세스 중에 엔진은 인라인 캐시 및 숨겨진 클래스와 같은 동적 최적화를 수행합니다. 3) 모범 사례에는 글로벌 변수를 피하고 루프 최적화, Const 및 Lets 사용 및 과도한 폐쇄 사용을 피하는 것이 포함됩니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

드림위버 CS6
시각적 웹 개발 도구

WebStorm Mac 버전
유용한 JavaScript 개발 도구

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

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.
