


Linux utilise screen pour gérer les méthodes d'instance de session à distance
Avez-vous souvent besoin de SSH ou de Telent pour vous connecter à distance à un serveur Linux ? Avez-vous souvent des maux de tête avec des tâches de longue durée, telles que la sauvegarde du système, le transfert FTP, etc. Normalement, nous ouvrons une fenêtre de terminal distant pour chacune de ces tâches car leur exécution prend trop de temps. Vous devez attendre la fin de l'exécution. Pendant cette période, vous ne pouvez pas fermer la fenêtre ou vous déconnecter, sinon la tâche sera tuée et tout sera abandonné à mi-chemin.
Le coupable : le signal SIGHUP
Voyons pourquoi la fermeture de la fenêtre/la déconnexion entraînera la mort du programme en cours d'exécution.
Sous Linux/Unix, il existe plusieurs concepts :
Groupe de processus (process group) : un ensemble d'un ou plusieurs processus, chaque groupe de processus a le seul processus ID de groupe, qui est l'ID du processus responsable du processus.
Session : un ensemble d'un ou plusieurs groupes de processus, avec un animateur de session unique. L'ID de session est l'ID du premier processus.
Une session peut avoir un terminal de contrôle séparé. Le premier processus de la session connecté au terminal de contrôle est appelé processus de contrôle. Le processus qui interagit actuellement avec le terminal est appelé groupe de processus de premier plan. Les groupes de processus restants sont appelés groupes de processus en arrière-plan.
Selon la définition POSIX.1 :
L'action par défaut du signal de raccrochage (SIGHUP) est de terminer le programme.
Lorsque l'interface du terminal détecte que la connexion réseau est déconnectée, elle envoie un signal de raccrochage au processus de contrôle (le premier processus de la session).
Si le processus de tête de session se termine, ce signal est envoyé au groupe de processus de premier plan de la session.
Lorsqu'un processus se termine et qu'un groupe de processus orphelins est créé, si un processus de groupe de processus orphelins est à l'état STOP, les signaux SIGHUP et SIGCONT sont envoyés à tous les processus du groupe de processus.
Par conséquent, lorsque le réseau est déconnecté ou que la fenêtre du terminal est fermée, le processus de contrôle reçoit le signal SIGHUP et se termine, ce qui entraînera la fermeture des autres processus de la session.
Regardons un exemple. Ouvrez deux fenêtres de terminal SSH et exécutez la commande top dans l'une d'elles.
[root@tivf09 root]# top
Dans une autre fenêtre de terminal, recherchez l'ID de processus top comme 5180, et son ID de processus parent est 5128, qui est le shell de connexion.
[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
Utilisez la commande pstree pour voir cette relation plus clairement :
[root@tivf09 root]# pstree -H 5180|grep top |-sshd-+-sshd---bash---top
Utilisez la commande ps-xj pour voir que le shell de connexion (PID 5128) et top sont dans le idem Pendant la session, le shell est le premier processus de la session et son PGID de groupe de processus est 5128. Le PGID du groupe de processus de Top est 5180, qui est le groupe de processus de premier plan.
[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
Fermez la première fenêtre SSH et vous pourrez voir dans une autre fenêtre que top a également été supprimé.
[root@tivf09 root]# ps -ef|grep 5128 root 18699 3672 0 04:35 pts/2 00:00:00 grep 5128
Si l'on peut ignorer le signal SIGHUP, la fermeture de la fenêtre ne devrait pas affecter le fonctionnement du programme. La commande nohup peut atteindre cet objectif si la sortie standard/erreur standard du programme est le terminal, nohup le redirigera vers le fichier nohup.out par défaut. Il convient de noter que la commande nohup amène uniquement le programme à ignorer le signal SIGHUP. Vous devez également utiliser la marque & pour l'exécuter en arrière-plan.
nohup <command> [argument…] &
Bien que nohup soit facile à utiliser, il reste relativement "brut". Il peut gérer des commandes simples, mais il est gênant pour les tâches complexes qui nécessitent une interaction homme-machine.
En fait, nous pouvons utiliser un écran utilitaire plus puissant. Les distributions Linux populaires (telles que Red Hat Enterprise Linux 4) sont généralement fournies avec l'utilitaire screen. Sinon, vous pouvez le télécharger depuis le site Web officiel de GNU screen.
[root@tivf06 ~]# rpm -qa|grep screen xscreensaver-4.18-5.rhel4.11 screen-4.0.2-5
Commencez à utiliser Screen
En termes simples, Screen est un gestionnaire de fenêtres qui peut multiplexer un terminal physique entre plusieurs processus. Screen a le concept de session. Les utilisateurs peuvent créer plusieurs fenêtres d'écran dans une session d'écran, et chaque fenêtre d'écran revient à exploiter une véritable fenêtre de connexion telnet/SSH. Il existe plusieurs façons de créer une nouvelle fenêtre dans screen :
1. Tapez la commande screen
[root@tivf06 ~]# screen
Screen directement sur la ligne de commande pour créer une fenêtre plein écran pour exécuter le shell. Vous pouvez exécuter des programmes shell arbitraires comme dans une fenêtre ssh. Tapez exit dans la fenêtre pour quitter la fenêtre. S'il s'agit de la seule fenêtre pour la session d'écran, la session d'écran se termine, sinon l'écran passe automatiquement à la fenêtre précédente.
2. La commande Screen est suivie du programme que vous souhaitez exécuter.
[root@tivf06 ~]# screen vi test.c
Screen crée une session à fenêtre unique qui exécute vi test.c Quitter vi quittera la fenêtre/session.
3. Les deux méthodes ci-dessus créent une nouvelle session d'écran. Nous pouvons également créer de nouvelles fenêtres au sein d’une session d’écran existante. Tapez C-a c dans la fenêtre d'écran actuelle, c'est-à-dire la touche Ctrl + une touche, puis appuyez sur la touche c, écran Créez une nouvelle fenêtre dans la session et accédez-y.
l'écran dispose également de fonctions plus avancées. Vous pouvez temporairement déconnecter (détacher) la session d'écran sans interrompre l'exécution du programme dans la fenêtre d'écran, et reconnecter (attacher) la session ultérieurement pour reprendre le contrôle des programmes exécutés dans chaque fenêtre. Par exemple, nous ouvrons une fenêtre d'écran pour éditer le fichier /tmp/abc :
[root@tivf06 ~]# screen vi /tmp/abc
Ensuite, nous voulons quitter temporairement et faire autre chose, comme aller se promener, puis taper C-a d dans le champ fenêtre d'écran, et Screen donnera Une invite détachée apparaît :
暂时中断会话
半个小时之后回来了,找到该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页。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds





Vs Code Système Exigences: Système d'exploitation: Windows 10 et supérieur, MacOS 10.12 et supérieur, processeur de distribution Linux: minimum 1,6 GHz, recommandé 2,0 GHz et au-dessus de la mémoire: minimum 512 Mo, recommandée 4 Go et plus d'espace de stockage: Minimum 250 Mo, recommandée 1 Go et plus d'autres exigences: connexion du réseau stable, xorg / wayland (Linux) recommandé et recommandée et plus

Les raisons de l'installation des extensions de code vs peuvent être: l'instabilité du réseau, les autorisations insuffisantes, les problèmes de compatibilité système, la version de code vs est trop ancienne, un logiciel antivirus ou des interférences de pare-feu. En vérifiant les connexions réseau, les autorisations, les fichiers journaux, la mise à jour vs du code, la désactivation des logiciels de sécurité et le redémarrage du code ou des ordinateurs, vous pouvez progressivement dépanner et résoudre les problèmes.

Bien que le bloc-notes ne puisse pas exécuter directement le code Java, il peut être réalisé en utilisant d'autres outils: à l'aide du compilateur de ligne de commande (Javac) pour générer un fichier bytecode (filename.class). Utilisez l'interpréteur Java (Java) pour interpréter ByteCode, exécuter le code et sortir le résultat.

VS Code est disponible sur Mac. Il a des extensions puissantes, l'intégration GIT, le terminal et le débogueur, et offre également une multitude d'options de configuration. Cependant, pour des projets particulièrement importants ou un développement hautement professionnel, le code vs peut avoir des performances ou des limitations fonctionnelles.

VS Code est le code Visual Studio Nom complet, qui est un éditeur de code multiplateforme gratuit et open source et un environnement de développement développé par Microsoft. Il prend en charge un large éventail de langages de programmation et fournit une mise en surbrillance de syntaxe, une complétion automatique du code, des extraits de code et des invites intelligentes pour améliorer l'efficacité de développement. Grâce à un écosystème d'extension riche, les utilisateurs peuvent ajouter des extensions à des besoins et des langues spécifiques, tels que les débogueurs, les outils de mise en forme de code et les intégrations GIT. VS Code comprend également un débogueur intuitif qui aide à trouver et à résoudre rapidement les bogues dans votre code.

Visual Studio Code (VSCODE) est un éditeur de code Open Source, Open Source et gratuit développé par Microsoft. Il est connu pour son léger, l'évolutivité et le support pour une large gamme de langages de programmation. Pour installer VScode, veuillez visiter le site officiel pour télécharger et exécuter l'installateur. Lorsque vous utilisez VSCODE, vous pouvez créer de nouveaux projets, modifier le code, déboguer le code, naviguer dans les projets, développer VSCODE et gérer les paramètres. VScode est disponible pour Windows, MacOS et Linux, prend en charge plusieurs langages de programmation et fournit diverses extensions via Marketplace. Ses avantages incluent le léger, l'évolutivité, le support linguistique étendu, les fonctionnalités riches et la version

Les principales utilisations de Linux comprennent: 1. Système d'exploitation du serveur, 2. Système intégré, 3. Système d'exploitation de bureau, 4. Environnement de développement et de test. Linux excelle dans ces domaines, offrant des outils de stabilité, de sécurité et de développement efficaces.

Pour afficher l'adresse du référentiel GIT, effectuez les étapes suivantes: 1. Ouvrez la ligne de commande et accédez au répertoire du référentiel; 2. Exécutez la commande "git Remote -v"; 3. Affichez le nom du référentiel dans la sortie et son adresse correspondante.
