検索
ホームページウェブフロントエンドjsチュートリアルLinux は screen を使用してリモート セッション インスタンス メソッドを管理します

Linux サーバーにリモートでログインするために SSH または Telent が必要になることがよくありますか?システムバックアップやFTP転送など、長時間実行されるタスクで頭が痛くなることがよくありますか。通常、このようなタスクの実行には時間がかかりすぎるため、そのタスクごとにリモート ターミナル ウィンドウを開きます。この期間中は、ウィンドウを閉じたり切断したりすることはできず、実行が完了するまで待つ必要があります。そうしないと、タスクが強制終了され、すべてが途中で放棄されます。

犯人: SIGHUP シグナル

ウィンドウを閉じる/切断すると、実行中のプログラムが終了する理由を見てみましょう。

Linux/Unix には、いくつかの概念があります:

  • プロセス グループ (プロセス グループ): 1 つ以上のプロセスの集合。各プロセス グループには一意のプロセス グループ ID、つまりプロセス グループ リーダー プロセス ID があります。 。

  • セッション: 固有のセッション リーダーを持つ 1 つ以上のプロセス グループのコレクション。セッション ID は最初のプロセスの ID です。

  • セッションには別の制御端末を含めることができます。制御端末に接続されたセッションの最初のプロセスを制御プロセスと呼びます。現在端末と対話しているプロセスは、フォアグラウンド プロセス グループと呼ばれます。残りのプロセス グループはバックグラウンド プロセス グループと呼ばれます。

POSIX.1 定義によると:

  • ハングアップ信号 (SIGHUP) のデフォルトの動作はプログラムを終了することです。

  • 端末インターフェースは、ネットワーク接続が切断されたことを検出すると、制御プロセス (セッションの最初のプロセス) にハングアップ信号を送信します。

  • セッションの最初のプロセスが終了すると、このシグナルがセッションのフォアグラウンドプロセスグループに送信されます。

  • プロセスが終了し、孤立プロセスグループが作成されるとき、孤立プロセスグループのプロセスが STOP 状態にある場合、プロセスグループ内のすべてのプロセスに SIGHUP および SIGCONT シグナルが送信されます。

そのため、ネットワークが切断されるかターミナルウィンドウが閉じられると、制御プロセスは SIGHUP シグナルを受信して​​終了し、これによりセッション内の他のプロセスが終了します。

例を見てみましょう。 2 つの SSH ターミナル ウィンドウを開き、そのうちの 1 つで 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 ウィンドウを閉じると、別のウィンドウでトップも強制終了されたことがわかります。

[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 の公式 Web サイトからダウンロードできます。

[root@tivf06 ~]# rpm -qa|grep screen
xscreensaver-4.18-5.rhel4.11
screen-4.0.2-5

Screenを使い始める

簡単に言うと、Screenは複数のプロセス間で物理端末を多重化できるウィンドウマネージャーです。スクリーンにはセッションの概念があり、ユーザーはスクリーン セッション内に複数のスクリーン ウィンドウを作成でき、実際の Telnet/SSH 接続ウィンドウを操作することができます。画面に新しいウィンドウを作成するには、いくつかの方法があります:

1.コマンドラインで直接 screen コマンドを入力すると、

[root@tivf06 ~]# screen

Screen シェルを実行するための全画面ウィンドウが作成されます。 SSH ウィンドウと同様に、任意のシェル プログラムを実行できます。ウィンドウに exit と入力してウィンドウを終了します。これが screen セッションの唯一のウィンドウである場合は、screen セッションが終了します。それ以外の場合、screen は自動的に前のウィンドウに切り替わります。

2. Screen コマンドの後には、実行するプログラムが続きます。

[root@tivf06 ~]# screen vi test.c

画面は、vi test.c を実行する単一ウィンドウ セッションを作成します。vi を終了すると、ウィンドウ/セッションが終了します。

3.上記のどちらの方法でも、新しい画面セッションが作成されます。既存の画面セッション内に新しいウィンドウを作成することもできます。現在の画面ウィンドウで C-a c と入力し、つまり Ctrl キー + a キーを押して c キーを押します。 セッション内に新しいウィンドウを作成し、それに切り替えます。

画面にはさらに高度な機能もあります。 Screen ウィンドウでのプログラムの実行を中断することなく、Screen セッションを一時的に切断 (デタッチ) し、後でセッションを再接続 (アタッチ) して、各ウィンドウで実行中のプログラムの制御を取り戻すことができます。たとえば、/tmp/abc ファイルを編集するためにスクリーン ウィンドウを開きます。

[root@tivf06 ~]# screen vi /tmp/abc

次に、一時的に終了して、散歩に行くなど、別のことをしたいとします。その後、スクリーン ウィンドウで C-ad と入力すると、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 &#39;screen -wipe&#39;.
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 は screen を使用してリモート セッション インスタンス メソッドを管理しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
CおよびJavaScript:接続が説明しましたCおよびJavaScript:接続が説明しましたApr 23, 2025 am 12:07 AM

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

Webサイトからアプリまで:JavaScriptの多様なアプリケーションWebサイトからアプリまで:JavaScriptの多様なアプリケーションApr 22, 2025 am 12:02 AM

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Python vs. JavaScript:ユースケースとアプリケーションと比較されますPython vs. JavaScript:ユースケースとアプリケーションと比較されますApr 21, 2025 am 12:01 AM

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

JavaScript通訳者とコンパイラにおけるC/Cの役割JavaScript通訳者とコンパイラにおけるC/Cの役割Apr 20, 2025 am 12:01 AM

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

JavaScript in Action:実際の例とプロジェクトJavaScript in Action:実際の例とプロジェクトApr 19, 2025 am 12:13 AM

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptとWeb:コア機能とユースケースJavaScriptとWeb:コア機能とユースケースApr 18, 2025 am 12:19 AM

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンの理解:実装の詳細JavaScriptエンジンの理解:実装の詳細Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Python vs. JavaScript:学習曲線と使いやすさPython vs. JavaScript:学習曲線と使いやすさApr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!